做者 赵劼 发布于 2009年9月15日 php
上个月Joe Stagner在博客上发表了一系列文章比较了PHP和ASP.NET的执行性能,引发了来自双方程序员的大量回应。Joe表示,他会将这样的测试持续下去,并寻求更为合适的方式,以得到对实际项目来讲尽量有参考价值的结论。html
Joe表示:程序员
通常来讲,做性能测试的目的是要尝试证实一方比令一方要快。我受雇于微软,同时编写PHP和ASP.NET代码。我在.NET出现以前就在使用PHP,两个东西我都很喜欢。编程
因此,我很难说出哪一个更好。当我说PHP好话时,个人微软同事们会写信来批评我,而当我发表倾向于ASP.NET的言论时,个人PHP朋友们会说我是微软的托。缓存
我进行这个测试是由于每一个人都对PHP的性能有本身的见解(Windows vs. Linux & 5.2 vs. 5.3),却没人能给出明确的数据。安全
根据Joe的描述,测试环境以下:性能优化
从实验结果上看,PHP在Linux和Windows的执行性能各有千秋:服务器
Joe认为,这表示:多线程
在Joe看来,全面来看,PHP和IIS团队在执行性能上已经作的很是成功,接下来就须要各开源程序的团队(Drupal、WordPress、Joomla等等)为各平台进行性能优化了。框架
不过,除了文件复制操做以外,ASP.NET在性能方面全面领先于PHP(不管部署在Linux仍是Windows上面):
对于这个测试结果,Joe补充道:
我知道个人一些PHP朋友和Linux伙计们要跳出来驳斥个人测试和结果了。:)
我一直在思考,这样的性能比较是否须要加入一些高级的优化选项。不过.NET方面也有例如多线程,异步请求,和各类缓存方式可使用
请注意——我并无说“ASP.NET更快,因此你不该该使用PHP!”,我使用认为,PHP过于简单致使对某些高级应用来讲有些举步维艰,就像ASP.NET在项目早期会有学习方面的复杂性。
对我来讲,PHP最使人兴奋的地方不是它的语言/平台,而是成千上万聪明的PHP开发人员,以及各类优秀的项目(如Drupal、Joomla、WordPress、PHPBB、Nuke等等)。
能够这么认为,PHP在Windows和Linux上的性能处于同一个水平上,我如今终于能够为Windows编写那些我盼望着许多年的PHP类库了。
Joe还公开了测试代码。他表示,若是你对这个测试的结果有疑义,能够亲自进行这个实验,或是编写你本身的测试代码进行试验。
文章发布以后,许多网友对这一测试结果发表了见解。Joe基本上逐一回复了其中的主要观点:
“我使用ASP.NET只是由于我喜欢Visual Studio IDE”——我我的认为Visual Studio是最有生产力的开发工具。可是,PHP的有不错的选择。我使用Zend Studio,PHPEd,Komodo,Delphi for PHP,这些都很不错。我讨厌Eclipse,不过Zend也在这方面为PHP开发作了很多扩展。
应该比较ASP的性能——不用了,谢谢。旧式的ASP与目前的PHP与ASP.NET差距太大了。作这种比较,彷佛是在建议使用ASP开发新项目,我强烈不建议你这么作。
32位与64位系统之间的比较——这些测试的目的并非为了体现64位系统上的性能差距。从此的测试我会增长64位的场景。
“PHP丑陋至极”——哦,我不一样意。旧式ASP要丑陋多了。你能够写出很是可怕而丑陋的PHP代码,也能够写出丑陋而可怕的C#或VB代码。一样,你也能够写出优雅的C++样式的PHP。这彻底只和开发人员的技能有关。
应该使用Windows上的Apache进行测试——Apache是Linux上的服务器,不过我认为若是你在Windows上不使用IIS 7则会损失太多太多东西了。
“有办法在Win2K8中,在不损失安全性的前提下加快文件复制性能吗?”——彷佛不行。我认为这涉及到Windows服务器上的ACL系统。我之后可能会测试经过数据流读取文件的性能,有些东西的性能可能会有所改善。不过,Web应用程序通常不会编程来复制大量文件。
“PHP一直是,也永远只是一个半专业性质的环境”——这种说法狗屁不通。PHP平台上有许多专业的,高质量的应用程序,也有不少我很是尊敬的开发人员。是否专业是开发人员的问题,不是PHP或ASP.NET的问题。
“我认为比较没有opcode缓存的PHP很不公平,.NET是编译执行的,而PHP须要每次都解释并‘编译’页面”——我赞成这个测试可能不够完整,可是我不认同这个逻辑。我测试PHP的方式,就和下载安装的方式同样。个人虚拟主机也没有安装op-code缓存。而事实上,ASP.NET自带这个特性也并不意味着测试是不公平的,这是由于PHP缺乏这个特性——不过这个要求很合理,我正在准备新的测试。
“说PHP不是一个‘专业的’语言很没道理,由于几乎全部最大的站点都是用PHP构建的”——这种说法是没道理,不过说那些站点“几乎都是”用PHP构建的也是错误的。有些是,有些不是。
Joe补充道:
若是大家看到这一数据以后对ASP.NET信心倍增我天然很高兴。若是我不认为.NET是开发Web应用程序来讲是一种更好的选择——至少不属于其它平台,那么我也不会在微软工做了。
可是……若是你由于这些数据而忽视PHP,也是错误且幼稚的行为。
从纯技术角度来讲,我认为.NET远比PHP强大,但这并不意味着PHP不够强大。在我看来,PHP的力量体如今众多的应用程序以及可用的框架。
大约一周之后,Joe公开了第二次测试的结果。与前一个测试相比,第二个测试主要有如下两个改变:
对于第二次测试及其结果,Joe解释到:
从结果上看,Ubuntu和Debian上运行PHP的性能差距能够忽略不计。部分条目的性能有些细小的改进,有些则有25%的提升,可是整体来讲其效果比我想象中要来得低。
使用APC以后,一些条目的运行反而变慢了,不过我认为这只是机器所形成的偏差。请注意,表格中显示的不是第一次的结果,都是通过两次刷新,确认是在缓存命中时获得的结果。
我认为如今的测试很是公平。
空的循环测试和空的函数执行很是重要,由于这反映了语言或平台的基础消耗。这是处页面传输等性能开销外的性能消耗,是一个重要的考虑方面。
个人一些PHP朋友也承认这个测试的准确性,不过给出了很是有看法的补充:
- ASP.NET在性能上的领先不会对我有什么影响。PHP是个人最爱,个人应用程序已经足够快了。
- 没错,ASP.NET在基础性能上是比较快,可是个人应用程序能够经过优秀的页面实现和JavaScript实践把这部分性能补回来。
- 我在进行Drupal开发,我对PHP最熟悉,所以我宁愿多花一些硬件来保持更好的开发效率。
这些都是很不错的评论!
此外,根据上一次实验的结果,在Windows平台上运行PHP时,在MySQL和文件的访问上有一些性能问题,微软许多团队都向我获取了相关信息。但愿这些数据都够转变为切实的改进。
Joe表示,他将收集你们认为更公平,更有意义的测试场景。如下是他所计划的测试项目:
国内也曾经进行过PHP在Linux和Windows平台上的性能测试。InfoQ曾经报道过微软在WordCamp China 2009大会上公开了以前与康盛创想合做进行的性能评估结果:在Windows Server 2008 + IIS上运行PHP,从平均相应时间,每秒处理的请求数,以及数据吞吐量等多方便均优于Linux + Apache的托管方式。
您的见解如何?您但愿看到什么样的测试呢?
赵劼 的网名为老赵,洋名Jeffrey Zhao,写有技术博客“老赵点滴”。关注前沿技术,并致力于开源社区与微软平台的组合优化。