盘点PHP和ASP.NET的10大对比!


Posted in PHP onDecember 24, 2015

在网上论坛,总是有成百上千的文章和帖子在讨论 PHP 和 ASP.NET,究竟谁才是更好的平台?不过很可惜,大部分人的观点总是带有偏见的,人们总会有意无意地推广自己喜欢的语言。

此外,如果你注意过这些争论帖和文章的日期,就会发现大部分的信息都是过时的。太可惜了,这些搜索排名考前的文章提供的信息却不再有效。我们还要考虑到,PHP 和 ASP.NET 都是有周期性的版本升级和优化的。

个人认为,这两种编程语言都可以在非常庞大的 Web 应用和网站上成功使用,因此,它们处理大型网络应用程序的能力是毋庸置疑的。

内容提要:

  • 关于性能:笔者会阐述影响性能的种种因素,其结果会证明因为速度而选择一种编程语言在大多数情况下是毫无意义的。
  • 关于可拓展性:笔者会阐述影响可拓展性的因素,但实际上,只要编程方法正确,两种语言的可拓展性能都十分强大。
  • 关于成本和技术支持:由于 PHP 是开源的,通常运行在 LAMP(即 Linux,Apache,MYSQL 和 PHP)这些开源平台上。因此,在提供最具成本效益的解决方案和提供大量的资源及支持方面,PHP 是优于 ASP.NET 的。
  • 关于平均部署时间(即附加成本):使用 ASP.NET 进行编码需要的代码量是使用 PHP 的两倍,因此使用 PHP 部署时间成本更低,速度更快。

下面仔细说明每个方面,并且附上见解。

1.可拓展性和易维护性
无论你选择 PHP 还是 ASP.NET 平台,对可拓展性和易维护性都不会有任何影响。Web 应用程序的可拓展性以及易维护性主要取决于以下几个方面:

  • 编程者的经验
  • 使用最佳的编码实践
  • 使用可靠的编程框架
  • 遵循程序设计指南和标准

2.性能和速度

关于这点,一直以来都存在许多争论,且大部分争论都是不客观且片面的。这些争论并没有给大家提供真正有效的信息,只是极力吹捧一种语言而贬低另一种。

当涉及到测量 Web 应用的速度时,值得考虑的因素非常多。以致于编程语言的运行速度,对当下大部分网站的速度和性能影响,其实是微乎其微的。

然而,如果要用这种语言完成雅虎或者谷歌这类网站每天都在执行的庞大任务,那么选择一种可以快速执行大型任务的编程语言就十分必要了,这也是谷歌和雅虎选择多种编程语言(大部分都是开源的)的原因,每种语言都用来执行最适合它的任务。

下面,笔者会分析各种常见和不常见的场景并且解释哪种任务更优。

  • 第一种常见情况

Web 应用的一种常见的任务是对数据库进行访问和查询,再把结果输出到 Web 服务器,继而浏览器。因此,在这个常见场景中,所有的编程语言都要担当数据库服务器和 Web 服务器之间的通信或者是接口的角色。在此场景中,编程语言的速度对整个进程几乎没有影响;该进程的速度主要取决于数据库服务器、Web 服务器,客户端的 Web 浏览器和带宽。

若是考虑常用的主流数据库服务器,MySQL(现在属于Oracle),PostgreSQL,MSSQL 和 Oracle 都在努力提升速度和性能。我们看到,每个版本的数据库服务器升级都会带来新功能和更好的性能,所以笔者认为只要数据库程序员使用优化的实用的 SQL 查询,并且必要情况下采用如缓存一类的先进功能,上述任一款数据库服务器都会有十分优越的表现。

谷歌,Facebook,YouTube,雅虎和最近因世界杯获得庞大观众数量的 FIFA 都在使用 MYSQL。因此,MySQL 数据库服务器的能力是毋庸置疑的。

基于线上的统计调查,截止至发稿时,PHP 与 MySQL 之间的通信和接口速度要快于 ASP.NET 和 MSSQL,但并不明显。

  • 第二种常见情况

Web 程序的另一种常见任务是访问文件系统,找到一个图像再将其发送到 Web 服务器。在这种情况下,编程语言的任务依然很少,与编程语言交流的负担主要落在操作系统与文件系统身上。

基于线上的统计调查,截止至发稿时,Linux 操作系统和 EXT4(文件系统)的性能优于 Windows 操作系统和 NTFS(文件系统)。

  • 第三种常见情况

大多数的 Linux / Unix 服务器的运行都很简约,没有任何额外的非必需的包或 GUI 界面,因此这些操作系统只需使用很少量的 CPU 和 RAM,从而将更多的资源留给数据库和 Web 服务器。

大多数 Windows 服务器运行十分笨重,有许多冗余的包会占用大量的 CPU 和 RAM。

很显然,LAMP 平台要比 ASP.NET 平台更有优势,因为它有更多的可用资源。

  • 第四种 不太常见的情况

ASP.NET 通常使用 C# 编写。一般而言,截止到目前为止,C# 是比 PHP 更快的编程语言。(但这种情况也可能改变,因为编程语言会为了提高速度而不断升级更新)因此,假设为了完成某次计算需要执行2,000,000次循环,那么用 C# 编写的 ASP.NET 程序将比 PHP 程序运行更快。然而,这是一种非常罕见的情况,一次计算循环次数最多为几百次,而不是2,000,000次。而且,在这种情况下,就应该考虑为什么要做一个2,000,000次的循环计算。

其他与编程语言无关,但会对性能产生影响的因素还包括:

  • 程序员在编写代码时的知识储备和能力
  • 程序员在编写 SQL 查询语句时的知识储备和能力
  • 所需实现的功能(有些功能在 ASP.NET 平台所需的执行时间长于在 PHP 平台所需的时间,有些则恰巧相反)

说到性能,在此不得不谈及一些专业的应用性能监控工具。可以有效的针对代码、SQL语句等进行优化,降低代码编写方面对性能和速度的影响。

appDynamics

NewRelic

OneAPM

盘点PHP和ASP.NET的10大对比!3.

3、成本
PHP,MySQL 服务器,PostgreSQL 服务器,Apache 服务器和 Linux 操作系统的使用和升级都是免费的。此外,另设一台备援主机,或者需要运行多个服务器以均衡负载或搭建服务器集群,也都没有额外的许可费用。

LAMP (Linux, Apache, MySQL 和 PHP)在托管公司中也更受欢迎。与 Windows 主机相比,LAMP 主机的普及性使得每月的托管费用更低。

如果你购买了 Windows 操作系统,那么 ASP.NET 和 IIS 就是免费的。微软的 Windows 服务器,SQL 服务器以及未来的更新价格昂贵。例如 Microsoft Server 2008 R2 64位标准版价格在1029美元左右,而针对小型企业的 Microsoft SQL Server 2008价格在1038美元上下。

如果这个网站变得受欢迎,有必要另设一台备援主机,或者需要运行多个服务器以负载均衡,搭建服务器集群,那么上述费用将会大幅度提高。

4.支持和资源
由于 LAMP 是开源的,世界各地专业且友好的开发者们一直在对这一开源平台的更新和改进提供源源不断的支持。除此之外,PHP 和 LAMP 平台还有很多其他的资源支持和开发者支持。

我之所以提及“友好”这个词,是因为向开源社区做出贡献的开发者们并不是为了得到经济利益。如果你在编码过程中遇到了功能挑战需要寻求帮助,去 PHP 的论坛上提问,你一定会收到友好的程序员们给出的有用信息。

ASP.NET 更依赖于微软数量有限的开发者做出的改进和更新。能帮助解决 ASP.NET 的贡献者相对较少。

5.部署时间
与 PHP 相比,ASP.NET 需要大量或者说更多行的代码去完成复杂的特性和功能,在开发过程中花费更多的时间。

此外,PHP 是在服务器端被编译的,因此,当改变功能时,无需额外步骤就能看到改变。相反的是,ASP.NET 的代码每次修改都需要进行编译。也就是说,开发过程中 ASP.NET 要比 PHP 消耗更多的时间。

6.编译器和工具
PHP 和 MySQL 都有独立编译器的,PHP 的开发者可以获得数量更丰富的编译器。

大多数 ASP.NET 程序员都依赖于 Microsoft Visual Studio 编译器开发 .NET程序。(许多 ASP.NET 程序员对 Microsoft Visual Studio 是又爱又恨)

这是完全不同的编程风格——使用 PHP 的程序员及开源开发者们更喜爱文本编辑器,例如 VI,VIM,Notepad ++。

VI 和 VIM 是非常高级的独立编辑器。开发者完全掌握这些编辑器的性能后,可以快速、高效且独立地进行复杂的编程。因此,他们能更加灵活地控制代码。当涉及到使用或与 JavaScript,Ajax,JQuery 等平台集成时,由于熟悉开源环境且使用 VI 或 VIM 手打代码,PHP 开发者往往更有优势。

7.平台独立性
PHP 具有平台独立性,可以在 Linux,Unix,Mac OS X,Windows 中的任何平台运行。ASP.NET 则只能在 Windows 平台上运行。

8.热门网站都运行在什么平台上?
下面的表格列出了当下流行站点所使用的平台和语言。 Note: Please don't confuse C with C# (pronounced C Sharp) — they are completely different programming languages. ASP.net is mostly programmed in C# (C Sharp) or Visual Basic and not C.
注:请勿混淆 C 与 C#,他们是两种完全不同的编程语言。ASP.NET 通常使用 C# 或者 Visual Basic 进行编程,而非 C 语言。

盘点PHP和ASP.NET的10大对比!

9.流行程度
LAMP 平台要比 Windows 平台更加流行。基于 Netcraft 2010年7月针对205,714,253个 Web 服务器进行的数据调研显示,有112,945,968(54.90%)的 Web 服务器托管在 Apache 上,有53,217,620(25.87%)的 Web 服务器托管在 Windows 上,剩余的则托管在其他平台上。

10.可用性和易部署性
关于 Linux 的不友善误传已久。

实际上,这取决于使用者的平台搭建经验和知识储备程度。

但不得不说,时下流行的改进后的 Linux 发行版给笔者留下了深刻的印象。诸如 Ubuntu,小红帽,CentOS,openSUSE 以及 Fedora 等发行版,不仅易于安装部署,还提供简单直接的 GUI 界面,使得配置 Linux 服务器变得更加简单易行。

很可惜,在我看来,微软的服务器在可用性上日渐衰落,服务器管理变得越发笨拙,并且充斥着许多不必要的功能。

很详细的针对PHP和ASP.NET进行对比,帮助大家更好地分析两者的区别,希望对大家进行开发有所帮助。

PHP 相关文章推荐
php 日期时间处理函数小结
Dec 18 PHP
php获取url字符串截取路径的文件名和扩展名的函数
Jan 22 PHP
php去掉字符串的最后一个字符附substr()的用法
Mar 23 PHP
php获取用户IPv4或IPv6地址的代码
Nov 15 PHP
如何利用php array_multisort函数 对数据库结果进行复杂排序
Jun 08 PHP
codeigniter数据库操作函数汇总
Jun 12 PHP
PHP统计nginx访问日志中的搜索引擎抓取404链接页面路径
Jun 30 PHP
php字符串函数学习之strstr()
Mar 27 PHP
php阿拉伯数字转中文人民币大写
Dec 21 PHP
CI框架文件上传类及图像处理类用法分析
May 18 PHP
PHP常见加密函数用法示例【crypt与md5】
Jan 27 PHP
CI框架教程之优化验证码机制详解【验证码辅助函数】
Apr 16 PHP
php采用session实现防止页面重复刷新
Dec 24 #PHP
Linux+Nginx+MySQL下配置论坛程序Discuz的基本教程
Dec 23 #PHP
分享PHP计算两个日期相差天数的代码
Dec 23 #PHP
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
Dec 23 #PHP
PHP+MySQL实现无极限分类栏目的方法
Dec 23 #PHP
PHP多维数组转一维数组的简单实现方法
Dec 23 #PHP
详解WordPress中简码格式标签编写的基本方法
Dec 22 #PHP
You might like
PHP扩展编写点滴 技巧收集
2010/03/09 PHP
解析php中获取url与物理路径的总结
2013/06/21 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
2019/11/13 PHP
滚动图片效果 jquery实现回旋滚动效果
2013/01/08 Javascript
JS实现下拉框的动态添加(附效果)
2013/04/03 Javascript
JQuery对表格进行操作的常用技巧总结
2014/04/23 Javascript
JavaScript操作Oracle数据库示例
2015/03/06 Javascript
jQuery超赞的评分插件(8款)
2015/08/20 Javascript
jquery实现动画菜单的左右滚动、渐变及图形背景滚动等效果
2015/08/25 Javascript
AngularJS Module方法详解
2015/12/08 Javascript
JS 全屏和退出全屏详解及实例代码
2016/11/07 Javascript
element-ui 中的table的列隐藏问题解决
2018/08/24 Javascript
JavaScript中的事件与异常捕获详析
2019/02/24 Javascript
vue请求服务器数据后绑定不上的解决方法
2019/10/30 Javascript
Vue实现仿iPhone悬浮球的示例代码
2020/03/13 Javascript
python中Genarator函数用法分析
2015/04/08 Python
基于Python实现一个简单的银行转账操作
2016/03/06 Python
VSCode下好用的Python插件及配置
2018/04/06 Python
Python基于百度云文字识别API
2018/12/13 Python
Python小进度条显示代码
2019/03/05 Python
python用win32gui遍历窗口并设置窗口位置的方法
2019/07/26 Python
关于Python中的向量相加和numpy中的向量相加效率对比
2019/08/26 Python
TensorFlow tensor的拼接实例
2020/01/19 Python
降低python版本的操作方法
2020/09/11 Python
Python字符串查找基本操作代码案例
2020/10/27 Python
python Timer 类使用介绍
2020/12/28 Python
HTML5 Canvas自定义圆角矩形与虚线示例代码
2013/08/02 HTML / CSS
Stylenanda中文站:韩国一线网络服装品牌
2016/12/22 全球购物
英国DVD和蓝光碟片购买网站:Zoom.co.uk(电影和电视)
2019/09/23 全球购物
Collection和Collections的区别
2016/05/02 面试题
服务行业个人求职的自我评价
2013/12/12 职场文书
往来会计岗位职责
2013/12/19 职场文书
教师个人年度总结
2015/02/11 职场文书
教你如何让spark sql写mysql的时候支持update操作
2022/02/15 MySQL
源码分析Redis中 set 和 sorted set 的使用方法
2022/03/22 Redis
《黑岩★★射手 DAWN FALL》BD发售宣传CM公开
2022/04/04 日漫