你的位置:面向PHP >> 资讯 >> 特别关注 >> 详细内容 在线投稿

ASP.NET比拼PHP,谁是速度之王?

热度144票  浏览129次 【共2条评论】【我要评论 时间:2009年9月30日 17:54
文章信息

来源:转载

新闻来源:IT168面向PHPJGm!Bsczk/h
刚刚在9月编程语言排行榜上取得历史性突破的PHP在Web开发领域最到的对手可能就是基于微软.NET技术的ASP.NET。近日,微软的JoeStagner在博客上发表了一系列文章比较了PHP和ASP.NET性能方面的文章,引起了来自双方程序员的大量回应。Joe表示,他会将这样的测试持续下去,并寻求更为合适的方式,以获得对实际项目来说尽可能有参考价值的结论。

zJ~#A)| ` k0 
Joe在博客中称,一般来说,作性能测试的目的是要尝试证明一方比令一方要快。我受雇于微软,同时编写PHP和ASP.NET代码。我在.NET出现之前就在使用PHP,两个东西我都很喜欢。面向PHP.E/eUZGH
面向PHPA[A9h-P0r,x[ e#r9r
所以,我很难说出哪个更好。当我说PHP好话时,我的微软同事们会写信来批评我,而当我发表倾向于ASP.NET的言论时,我的PHP朋友们会说我是微软的托。
_/D6T%e4?'n}0
4z4^e1IX:E P0我进行这个测试是因为每个人都对PHP的性能有自己的看法(Windows vs. Linux & 5.2 vs. 5.3),却没人能给出明确的数据。面向PHP ~'Yf L:_*T,U1|-[
面向PHPh(r`)Rvt |$`
ASP.NET比拼PHP的测试环境如下:
K0^di;WY.t0面向PHP_)?~9d*uf(z _
    *   所有的测试都在同一台机器上运行(拥有4G内存和60G 7200转硬盘的Toshiba Tecra M5)。面向PHP)Q1y7j Y7_3o
    *   Ubuntu 9和Windows Server 2008标准版分别安装于独立(但相同)的硬盘中。
{_*c4bok M-sb@0    *   Linux使用Apache2,Windows使用IIS 7作为各自的Web服务器。
D8k8s2G;i E0    *   双方的操作系统都进行了完整的patch或升级。
{8KOB7hkq gML0    *   双方的系统和运行时都没有进行额外的性能增强。面向PHPOZGOP$SE
面向PHPxi%eB6VUr
从实验结果上看,PHP在Linux和Windows的执行性能各有千秋:面向PHPLM!U4Y1f$~[bZ&\

S @TEg0    *   纯粹的语句执行在Windows上表现更好。
&A!\7f:I ef rK0    *   函数调用在Windows上更快。
|(f/O&kS CE i2|C0    *   对象的创建和访问,对于PHP 5.2来说在Linux上更快,但是对于PHP 5.3来说则是Windows更快。
xVLQR|~a0    *   类库调用在Linux上快得多(如在Ubuntu上进行加密要比Windows要快3到5倍)。面向PHP;ip(?WG"cq

lL;W$|tqF0Linux与Windows平台对比
+}t#n6mwbh0
'L/neC#Q&B M}t,@0在Linux上访问文件性能略高于Windows,不过Windows上文件复制的性能要比Linux慢60%,可能是ACL高级安全的缘故。面向PHP/i{3l~(bzR
面向PHPcZV?r[K$aI
在Linux上访问MySQL要比Windows快不少,而且在Windows上运行PHP 5.3的情况则更为恶劣(不过从下面PostgreSQL的情况上来看,这应该是糟糕实现的缘故)。
&_u[/s/|{QP.W0
[cmEIZ0PostgreSQL在两个平台上的性能非常接近(1000个操作的差距在0.06秒之内)——无论是PHP 5.3还是PHP 5.2,Windows上表现都略胜一筹。面向PHP vR@,~hK5j
面向PHPa2HOL(L u4|
Windows上PHP 5.2访问MS SQL Server的性能稍逊于在Linux上访问MySQL(此时还没有面向PHP 5.3的SQL Server支持)。
I/BH)~kB"LF0
8m@O9{:d1g3q#Qi0对于纯粹的PHP执行性能来说,Linux和Windows相差无几,这不会成为选择Linux或Windows作为部署平台的决定性因素。如果你在构建一个应用程序,那么PostgreSQL可能是更好的选择。因为它在两个平台上的表现都很优秀。面向PHP:q ^%vrf"[In'{
面向PHPz"zV:d j.Z7h C
如果你的应用程序必须使用MySQL,那么选择Windows就需要早些计划扩展性问题了(个人认为Sun不太可能为Windows优化MySQL的性能)。面向PHP&qx-b&`rgd;oJj5n
面向PHP(all*|7L _ md:fi,q
PHP的第一个版本的SQL Server驱动程序要比MySQL或PostpreSQL要慢一些,但这应该不会成为问题。第二个版本的驱动器正在开发之中,它会带来性能提升。面向PHPqw-i,o6h3k
面向PHP}4wxY x:m)E
在Joe看来,全面来看,PHP和IIS团队在执行性能上已经做的非常成功,接下来就需要各开源程序的团队(Drupal、WordPress、Joomla等等)为各平台进行性能优化了。面向PHP|e-`+t_L%i2x

1C%d c8m.z*H.QgB0不过,除了文件复制操作之外,ASP.NET在性能方面全面领先于PHP(无论部署在Linux还是Windows上面):面向PHP!ruU{ ~4`M
面向PHPR!pH'Rdb4X3y v
Linux上访问MySQL的性能稍稍优于Windows上访问SQL Server的性能(使用普通的数据类型和SELECT语句)。但是这里的差距几乎可以忽略不计。面向PHP1I E[5d~!D I8S5[t

[#sOs9Q @5t0ASP.NET(C#)操作,如对象使用,类库调用等等,其性能都远高于PHP。对于这个测试结果,Joe补充道:面向PHP7s;NcT)}R
面向PHPp`'a{dck0pp
我知道我的一些PHP朋友和Linux伙计们要跳出来驳斥我的测试和结果了。面向PHP}6O:F9F'_0?

v1`%Mu,H Da1{0我一直在思考,这样的性能比较是否需要加入一些高级的优化选项。不过.NET方面也有例如多线程,异步请求,和各种缓存方式可以使用
Nf,|l8Hh0
_+qG\L#\7H|0请注意——我并没有说“ASP.NET更快,所以你不应该使用PHP!”,我使用认为,PHP过于简单导致对某些高级应用来说有些举步维艰,就像ASP.NET在项目早期会有学习方面的复杂性。面向PHP1R(a&J\qw j _k

{/j"]8W.}|d|Y0对我来说,PHP最令人兴奋的地方不是它的语言/平台,而是成千上万聪明的PHP开发人员,以及各种优秀的项目(如Drupal、Joomla、WordPress、PHPBB、Nuke等等)。面向PHPh"@'{ ls
面向PHPe2[w`vd6d
可以这么认为,PHP在Windows和Linux上的性能处于同一个水平上,我现在终于可以为Windows编写那些我盼望着许多年的PHP类库了。面向PHP0wdH|Sd8jo5A-P

r0T ~H-n k9z0Joe还公开了测试代码。他表示,如果你对这个测试的结果有疑义,可以亲自进行这个实验,或是编写你自己的测试代码进行试验。
VA,f*m4b0
b0e9\\[2}u0文章发布之后,许多网友对这一测试结果发表了看法。Joe基本上逐一回复了其中的主要观点:
qX8S;D8Jy;Z0
!}*G8|?;Ov if*~0“我使用ASP.NET只是因为我喜欢Visual Studio IDE”——我个人认为VisualStudio是最有生产力的开发工具。但是,PHP的有不错的选择。我使用Zend Studio,PHPEd,Komodo,Delphi forPHP,这些都很不错。我讨厌Eclipse,不过Zend也在这方面为PHP开发做了不少扩展。
t.x|5Knl3tX0
r2V!S'G"}5c0应该比较ASP的性能——不用了,谢谢。旧式的ASP与目前的PHP与ASP.NET差距太大了。做这种比较,似乎是在建议使用ASP开发新项目,我强烈不建议你这么做。面向PHP(V*@t c;x{Q.T/pew:m

h3h iR%bi%l#p032位与64位系统对比
0a{M!B\~0
3c'F g%w;S:X2}]1~032位与64位系统之间的比较——这些测试的目的并不是为了体现64位系统上的性能差距。今后的测试我会增加64位的场景。面向PHP!O@PfP r%\Q(}

O2j j8_}$n!TJ![0“PHP丑陋至极”——哦,我不同意。旧式ASP要丑陋多了。你可以写出非常可怕而丑陋的PHP代码,也可以写出丑陋而可怕的C#或VB代码。同样,你也可以写出优雅的C++样式的PHP。这完全只和开发人员的技能有关。面向PHP\&A#N]3E9Bxy [s l

{-w,m(g,~"]'V0应该使用Windows上的Apache进行测试——Apache是Linux上的服务器,不过我认为如果你在Windows上不使用IIS 7则会损失太多太多东西了。
A1n+mj1c_8?/K#b0面向PHPW-eT m:a
“有办法在Win2K8中,在不损失安全性的前提下加快文件复制性能吗?”——似乎不行。我认为这涉及到Windows服务器上的ACL系统。我以后可能会测试通过数据流读取文件的性能,有些东西的性能可能会有所改善。不过,Web应用程序一般不会编程来复制大量文件。面向PHP5J so6h8N
面向PHP7w(JZ$M7f.q-xH
“PHP一直是,也永远只是一个半专业性质的环境”——这种说法狗屁不通。PHP平台上有许多专业的,高质量的应用程序,也有很多我非常尊敬的开发人员。是否专业是开发人员的问题,不是PHP或ASP.NET的问题。
@"x2{h3Qyf1hM0
(J @d p?.i.b0h0“我认为比较没有opcode缓存的PHP很不公平,.NET是编译执行的,而PHP需要每次都解释并‘编译’页面”——我同意这个测试可能不够完整,但是我不认同这个逻辑。我测试PHP的方式,就和下载安装的方式一样。我的虚拟主机也没有安装op-code缓存。而事实上,ASP.NET自带这个特性也并不意味着测试是不公平的,这是因为PHP缺少这个特性——不过这个要求很合理,我正在准备新的测试。面向PHPF+hu a'_
面向PHP0nI xj Sj'l8W
“说PHP不是一个‘专业的’语言很没道理,因为几乎所有最大的站点都是用PHP构建的”——这种说法是没道理,不过说那些站点“几乎都是”用PHP构建的也是错误的。有些是,有些不是。
a D1bG)}$GOW0
5D5p7r6HF0如果你们看到这一数据之后对ASP.NET信心倍增我自然很高兴。如果我不认为.NET是开发Web应用程序来说是一种更好的选择——至少不属于其它平台,那么我也不会在微软工作了。面向PHP%W'q9LA1Mh

p5Y!vx2wj(LP0但是……如果你因为这些数据而忽视PHP,也是错误且幼稚的行为。面向PHP:qL)H+BVo

eB r'sf*m.l0从纯技术角度来说,我认为.NET远比PHP强大,但这并不意味着PHP不够强大。在我看来,PHP的力量体现在众多的应用程序以及可用的框架。
|2| f$Hq(M`g0
'\/OQ4MP9O"M0大约一周以后,Joe公开了第二次测试的结果。与前一个测试相比,第二个测试主要有以下两个改变:面向PHPEnW*N!G8g![
面向PHP4[p0V)I*P3Y2T
为Linux和Windows上安装了op-code缓存,并重新运行了大部分测试。
6}*r7m iR%j4S@lb0面向PHP8L6w G"wm'srSx
由于一些依赖项的问题,PHP 5.3 + APC的测试平台变成了Debain 5操作系统。
Rj:^kpt)l |!e0面向PHP BC\EB~]
对于第二次测试及其结果,Joe解释到:
ro5R.@m(?$V&K0面向PHPXP$O]_f.@7d&L%B
从结果上看,Ubuntu和Debian上运行PHP的性能差距可以忽略不计。部分条目的性能有些细小的改进,有些则有25%的提高,但是总体来说其效果比我想象中要来得低。
xkDJv.Z"\G0面向PHP9y5\;W|(bNM~Gc
使用APC之后,一些条目的运行反而变慢了,不过我认为这只是机器所造成的误差。请注意,表格中显示的不是第一次的结果,都是经过两次刷新,确认是在缓存命中时得到的结果。面向PHP&^!W:~,rt&G)y.cd~x

N0f7{a-L'{0我认为现在的测试非常公平。面向PHP I(Cv@+vuc

N3o-f QT^.sw0空的循环测试和空的函数执行非常重要,因为这反映了语言或平台的基础消耗。这是处页面传输等性能开销外的性能消耗,是一个重要的考虑方面。面向PHP9Ck%Py&C&Ej6~

2n+SO&hl^6Ve0我的一些PHP朋友也认可这个测试的准确性,不过给出了非常有见解的补充:面向PHP@ kD7[|6Zu

)u"SJ-SO4Q#J0ASP.NET在性能上的领先不会对我有什么影响。PHP是我的最爱,我的应用程序已经足够快了。没错,ASP.NET在基础性能上是比较快,但是我的应用程序可以通过优秀的页面实现和JavaScript实践把这部分性能补回来。面向PHP if+u%v ~sx Ww

l3{{J(xOC0此外,根据上一次实验的结果,在Windows平台上运行PHP时,在MySQL和文件的访问上有一些性能问题,微软许多团队都向我获取了相关信息。希望这些数据都够转变为切实的改进。面向PHPK;@!snx.[

5Ak:_ k[(R/D]0Joe表示,他将收集大家认为更公平,更有意义的测试场景。以下是他所计划的测试项目:
m^bU#e1]6{e0
/sU o7Z su#L&t5G0    *   实际页面测试:循环,寒暑调用和对象操作是一类测试,不过页面的整体呈现则是另一种有意义的测试。面向PHPF~x:e3l
    *   负载测试:哪一个环境可以同时处理更大量的请求。
}%?R5{9JA \ Ll$Qh0    *   在负载测试中,哪一方的性能会下降地更快。
b |!D+[EKR"wtM0    *   在各种情况下,64位平台的表现如何。面向PHPI]1l~%Hz-H\
面向PHP;zXv0w#p?/T#KM p|1?
国内也曾经进行过PHP在Linux和Windows平台上的性能测试。微软在WordCamp China2009大会上公开了之前与康盛创想合作进行的性能评估结果:在Windows Server 2008 +IIS上运行PHP,从平均相应时间,每秒处理的请求数,以及数据吞吐量等多方便均优于Linux + Apache的托管方式
TAG: PHP php 速度 NET ASP
顶:14 踩:6
对本文中的事件或人物打分:
当前平均分:-0.26 (39次打分)
对本篇资讯内容的质量打分:
当前平均分:-0.44 (50次打分)
【已经有35人表态】
7票
感动
3票
路过
2票
高兴
5票
难过
6票
搞笑
5票
愤怒
3票
无聊
4票
同情
上一篇 下一篇
面向PHP北京市方正宽带网友 [sex] ip: 59.108.*.*
2009-10-26 13:22:50
站长,你好,你的那个PHP opcodesdumper怎么没有了啊,网站打不开了。。。。。。。。我想要,您能给我发一下吗?谢谢
我的邮箱是tsinghua_uni@163.com。
面向PHPAPNIC网友 [膘叔] ip: 118.242.*.*
2009-11-30 16:43:44
原文由面向PHP北京市方正宽带网友 [sex] 于2009-10-26 13:22:50发表
站长,你好,你的那个PHP opcodesdumper怎么没有了啊,网站打不开了。。。。。。。。我想要,您能给我发一下吗?谢谢
 
只能回去找找有没有本地代码备份了。。。
发表评论

网友评论仅供网友表达个人看法,并不表明本网同意其观点或证实其描述。

查看全部回复【已有2位网友发表了看法】