当前位置: 主页 > 编程知识 > net编程 > ASP.NET比拼PHP,谁是速度之王?

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

时间:2009-10-2来源:互联网 点击:
刚刚在9月编程语言排行榜上取得历史性突破的PHP在Web开发领域最到的对手可能就是基于微软.NET技术的ASP.NET。近日,微软的Joe Stagner在博客上发表了一系列文章比较了PHP和ASP.NET性能方面的文章,引起了来自双方程序员的大量回应。Joe表示,他会将这样的测试持续下去,并寻求更为合适的方式,以获得对实际项目来说尽可能有参考价值的结论。& ]0 K5 Y& c, l
# Q‘ h* T+ F  }) L- }3 J‘ q0 M
) {# P5 z8 k" E! b. C- G- n: _2 R
Joe在博客中称,一般来说,作性能测试的目的是要尝试证明一方比令一方要快。我受雇于微软,同时编写PHP和ASP.NET代码。我在.NET出现之前就在使用PHP,两个东西我都很喜欢。
/ n$ @8 I6 ^( S/ q$ a0 q/ J; v8 g. }( d4 `: p4 l; Y# W" @
所以,我很难说出哪个更好。当我说PHP好话时,我的微软同事们会写信来批评我,而当我发表倾向于ASP.NET的言论时,我的PHP朋友们会说我是微软的托。8 L/ p3 a1 w‘ I% G8 h  X

! J$ x/ K  Q3 x1 I: d7 M我进行这个测试是因为每个人都对PHP的性能有自己的看法(Windows vs. Linux & 5.2 vs. 5.3),却没人能给出明确的数据。( _2 e) v" E" M% q+ _6 r1 u
; d. m0 Y  P( p: m
ASP.NET比拼PHP的测试环境如下:
1 ]" ], E! ?" T+ S! B/ a3 j) O: P6 W
    *   所有的测试都在同一台机器上运行(拥有4G内存和60G 7200转硬盘的Toshiba Tecra M5)。1 b! y0 q9 i3 u( [
    *   Ubuntu 9和Windows Server 2008标准版分别安装于独立(但相同)的硬盘中。7 G. q# N5 @( c: Z
    *   Linux使用Apache2,Windows使用IIS 7作为各自的Web服务器。+ x& ~7 b% P, w/ V
    *   双方的操作系统都进行了完整的patch或升级。& Y‘ C. g2 b: m- d- D( {
    *   双方的系统和运行时都没有进行额外的性能增强。- H! y; V$ }2 m) k3 F& ~
& t! t& Q7 D$ T% Q8 A6 s: v
从实验结果上看,PHP在Linux和Windows的执行性能各有千秋:% }- ~6 [& v: z  O. K) _8 x
( n3 z: c" Z0 A6 }2 [
    *   纯粹的语句执行在Windows上表现更好。2 u+ y. j4 l) M( m  L
    *   函数调用在Windows上更快。, {9 c# [/ {7 G6 a
    *   对象的创建和访问,对于PHP 5.2来说在Linux上更快,但是对于PHP 5.3来说则是Windows更快。1 E: O9 m, h% ]3 i1 |
    *   类库调用在Linux上快得多(如在Ubuntu上进行加密要比Windows要快3到5倍)。
, o5 s, {( |0 n/ D‘ R% z% m  p/ s* E# P- Y# T% d% q  d
Linux与Windows平台对比3 N4 m/ T* G- f‘ ]$ H

$ q" R: i- f/ w4 u3 N7 U  t( W在Linux****问文件性能略高于Windows,不过Windows上文件复制的性能要比Linux慢60%,可能是ACL高级安全的缘故。1 ]% r‘ k‘ v& i: Z/ @

9 F/ v% g: d‘ i+ ]. M  y8 ~在Linux****问MySQL要比Windows快不少,而且在Windows上运行PHP 5.3的情况则更为恶劣(不过从下面PostgreSQL的情况上来看,这应该是糟糕实现的缘故)。
  O3 B1 G/ }( l& t/ R0 a
" U/ Q9 l3 N6 \3 V. IPostgreSQL在两个平台上的性能非常接近(1000个操作的差距在0.06秒之内)——无论是PHP 5.3还是PHP 5.2,Windows上表现都略胜一筹。; A) A4 z" R* k  ~& ?6 `) ~
: o& Y. ]- Z5 N8 r9 M2 b: ~( }6 O0 u- p. }
Windows上PHP 5.2访问MS SQL Server的性能稍逊于在Linux****问MySQL(此时还没有面向PHP 5.3的SQL Server支持)。
‘ o- o, j/ C3 Q* P) P3 v) _8 {$ y! @‘ ?; a
对于纯粹的PHP执行性能来说,Linux和Windows相差无几,这不会成为选择Linux或Windows作为部署平台的决定性因素。如果你在构建一个应用程序,那么PostgreSQL可能是更好的选择。因为它在两个平台上的表现都很优秀。# a2 e‘ F$ L8 w‘ N5 w; X! U+ h9 w

! `  ~) ?; i1 K5 h0 Z$ N6 r如果你的应用程序必须使用MySQL,那么选择Windows就需要早些计划扩展性问题了(个人认为Sun不太可能为Windows优化MySQL的性能)。
+ {‘ R0 H/ I/ s$ J8 E
7 L" Z( N9 \8 k( c" [" j2 I& g6 kPHP的第一个版本的SQL Server驱动程序要比MySQL或PostpreSQL要慢一些,但这应该不会成为问题。第二个版本的驱动器正在开发之中,它会带来性能提升。
% I+ A8 M( ~$ {) w* b# k5 N0 p; V! K/ H3 W7 N3 L
在Joe看来,全面来看,PHP和IIS团队在执行性能上已经做的非常成功,接下来就需要各开源程序的团队(Drupal、WordPress、Joomla等等)为各平台进行性能优化了。1 K6 N; @: S( Z# r, H

. {4 O3 O$ ]; I! V3 \: \2 f不过,除了文件复制操作之外,ASP.NET在性能方面全面领先于PHP(无论部署在Linux还是Windows上面):
: p‘ Y& E+ B. B3 s+ {( [8 N( W& c# X! t0 F& n8 h% J
Linux****问MySQL的性能稍稍优于Windows****问SQL Server的性能(使用普通的数据类型和SELECT语句)。但是这里的差距几乎可以忽略不计。
; m6 l2 i5 l$ M; @" {: x5 S$ o
+ a7 Q, b9 t  ?$ w, F. uASP.NET(C#)操作,如对象使用,类库调用等等,其性能都远高于PHP。对于这个测试结果,Joe补充道:  l2 `9 i* P" m+ ~  h

+ ^9 z0 G1 x4 k% w我知道我的一些PHP朋友和Linux伙计们要跳出来驳斥我的测试和结果了。# O. i9 O) l+ \1 r! F0 n0 K( z# Y5 T
9 F+ q; P# k9 s
我一直在思考,这样的性能比较是否需要加入一些高级的优化选项。不过.NET方面也有例如多线程,异步请求,和各种缓存方式可以使用* T. x- H, F: @7 Q0 W& F
8 p- ?; |& z1 a1 t‘ @& Z8 d
请注意——我并没有说“ASP.NET更快,所以你不应该使用PHP!”,我使用认为,PHP过于简单导致对某些高级应用来说有些举步维艰,就像ASP.NET在项目早期会有学习方面的复杂性。
; |$ r5 G- }. p1 ^% G" D! ~+ D6 x) G! v
对我来说,PHP最令人兴奋的地方不是它的语言/平台,而是成千上万聪明的PHP开发人员,以及各种优秀的项目(如Drupal、Joomla、WordPress、PHPBB、Nuke等等)。
/ F$ m! R: |4 W  I+ J; r
% u" v1 G3 `0 u1 m( M可以这么认为,PHP在Windows和Linux上的性能处于同一个水平上,我现在终于可以为Windows编写那些我盼望着许多年的PHP类库了。
8 D8 Q7 C- ^5 a7 U2 S. D+ O
& t‘ ^5 ~- @- N( fJoe还公开了测试代码。他表示,如果你对这个测试的结果有疑义,可以亲自进行这个实验,或是编写你自己的测试代码进行试验。! ^8 N( i3 g4 v3 q% d
% c0 x& Q; k/ U, D" Y3 W
文章发布之后,许多网友对这一测试结果发表了看法。Joe基本上逐一回复了其中的主要观点:
# C7 }- b* O" M- P2 ]- P; m- L/ D! P0 }, J0 _* {
“我使用ASP.NET只是因为我喜欢Visual Studio IDE”——我个人认为Visual Studio是最有生产力的开发工具。但是,PHP的有不错的选择。我使用Zend Studio,PHPEd,Komodo,Delphi for PHP,这些都很不错。我讨厌Eclipse,不过Zend也在这方面为PHP开发做了不少扩展。
0 J8 n( h‘ S; {2 i
1 M‘ u9 p- ~‘ g应该比较ASP的性能——不用了,谢谢。旧式的ASP与目前的PHP与ASP.NET差距太大了。做这种比较,似乎是在建议使用ASP开发新项目,我强烈不建议你这么做。
* D7 y& J! h8 E# B( C; U  G5 I& j8 a% n" t
32位与64位系统对比$ {" @- N. U+ y6 Z+ G
4 b- `6 c2 Q% [6 M
32位与64位系统之间的比较——这些测试的目的并不是为了体现64位系统上的性能差距。今后的测试我会增加64位的场景。
: p8 Q7 x! G; ?$ G
6 P  x. E, s+ f5 a3 `“PHP丑陋至极”——哦,我不同意。旧式ASP要丑陋多了。你可以写出非常可怕而丑陋的PHP代码,也可以写出丑陋而可怕的C#或VB代码。同样,你也可以写出优雅的C++样式的PHP。这完全只和开发人员的技能有关。1 |. }$ Q+ J$ ^/ i9 f
8 a, ^3 r! Q$ D. a
应该使用Windows上的Apache进行测试——Apache是Linux上的服务器,不过我认为如果你在Windows上不使用IIS 7则会损失太多太多东西了。
$ G2 U6 ^* Q/ L" y$ |4 o9 `: L" X$ `* q8 t
“有办法在Win2K8中,在不损失安全性的前提下加快文件复制性能吗?”——似乎不行。我认为这涉及到Windows服务器上的ACL系统。我以后可能会测试通过数据流读取文件的性能,有些东西的性能可能会有所改善。不过,Web应用程序一般不会编程来复制大量文件。
* K7 M* [4 T$ \: x) E  K- P, G‘ d5 b5 R7 K
“PHP一直是,也永远只是一个半专业性质的环境”——这种说法狗屁不通。PHP平台上有许多专业的,高质量的应用程序,也有很多我非常尊敬的开发人员。是否专业是开发人员的问题,不是PHP或ASP.NET的问题。
5 h7 u  u4 X6 F/ U6 `! Q+ t6 P‘ w
4 C: k2 q! s& u2 h3 @9 Q% W“我认为比较没有opcode缓存的PHP很不公平,.NET是编译执行的,而PHP需要每次都解释并‘编译’页面”——我同意这个测试可能不够完整,但是我不认同这个逻辑。我测试PHP的方式,就和下载安装的方式一样。我的虚拟主机也没有安装op-code缓存。而事实上,ASP.NET自带这个特性也并不意味着测试是不公平的,这是因为PHP缺少这个特性——不过这个要求很合理,我正在准备新的测试。! m/ ]* D$ i0 t

‘ [4 X; @6 P0 [“说PHP不是一个‘专业的’语言很没道理,因为几乎所有最大的站点都是用PHP构建的”——这种说法是没道理,不过说那些站点“几乎都是”用PHP构建的也是错误的。有些是,有些不是。, s% Z# G% t8 c+ X! B3 N& w1 ]. B

* ?, ?7 k) |; P6 ~  b如果你们看到这一数据之后对ASP.NET信心倍增我自然很高兴。如果我不认为.NET是开发Web应用程序来说是一种更好的选择——至少不属于其它平台,那么我也不会在微软工作了。
. U) z% a0 F2 b: [8 ?, S
1 X  l; W$ N0 p* x/ \0 h但是……如果你因为这些数据而忽视PHP,也是错误且幼稚的行为。7 k$ Y+ @. e4 B9 {6 {$ J‘ F

+ B- O! w2 i0 i" h+ V从纯技术角度来说,我认为.NET远比PHP强大,但这并不意味着PHP不够强大。在我看来,PHP的力量体现在众多的应用程序以及可用的框架。+ A; H‘ [% N/ O7 r2 U" U! r

  ]& d3 w1 L# }: j% S9 p9 J! v大约一周以后,Joe公开了第二次测试的结果。与前一个测试相比,第二个测试主要有以下两个改变:‘ z0 v0 O" t  y8 e  |1 d0 i
: f" Z6 `) L! H
为Linux和Windows上安装了op-code缓存,并重新运行了大部分测试。) l. R  W8 L  W( p

. Q. K3 X7 h3 O由于一些依赖项的问题,PHP 5.3 + APC的测试平台变成了Debain 5操作系统。
& j- c2 `7 L1 u! h
% Y6 f: E$ o* m# Y& h5 q/ Z& h& q% O对于第二次测试及其结果,Joe解释到:5 ~/ [# P; ?1 E
" A0 x: m5 q, {
从结果上看,Ubuntu和Debian上运行PHP的性能差距可以忽略不计。部分条目的性能有些细小的改进,有些则有25%的提高,但是总体来说其效果比我想象中要来得低。
7 {; ]  g- c# n" v* g# N& O
0 v& }: {9 b) T8 q( X$ C" |4 I使用APC之后,一些条目的运行反而变慢了,不过我认为这只是机器所造成的误差。请注意,表格中显示的不是第一次的结果,都是经过两次刷新,确认是在缓存命中时得到的结果。: y; y6 q4 t. R$ s& D8 X* S& J

5 w* {8 u, v$ G‘ h我认为现在的测试非常公平。
! o  i, D! {2 o1 q
) s) p& n7 |9 u! A‘ @空的循环测试和空的函数执行非常重要,因为这反映了语言或平台的基础消耗。这是处页面传输等性能开销外的性能消耗,是一个重要的考虑方面。
) _4 o8 X" s8 K% y: \" f" s# l3 a, c& |4 m
我的一些PHP朋友也认可这个测试的准确性,不过给出了非常有见解的补充:
5 W2 K4 W8 ~- X, w( {% [/ z+ G, c6 F8 [& k& j( V" \) b6 {) k
ASP.NET在性能上的领先不会对我有什么影响。PHP是我的最爱,我的应用程序已经足够快了。没错,ASP.NET在基础性能上是比较快,但是我的应用程序可以通过优秀的页面实现和JavaScript实践把这部分性能补回来。9 `  w7 A9 b* {4 x, p
) A. I% z‘ y! ~! B- g
此外,根据上一次实验的结果,在Windows平台上运行PHP时,在MySQL和文件的访问上有一些性能问题,微软许多团队都向我获取了相关信息。希望这些数据都够转变为切实的改进。/ c7 k- |/ b) L0 u" n  o1 U) A4 W
5 y1 I8 a3 `. }7 A4 u: l
Joe表示,他将收集大家认为更公平,更有意义的测试场景。以下是他所计划的测试项目:2 K1 b+ J6 W$ N$ L9 S‘ R* j

, b; x# z‘ M/ Z; c  w. t$ Y    *   实际页面测试:循环,寒暑调用投韵蟛僮魇且焕嗖馐裕还趁娴恼宄氏衷蚴橇硪恢钟幸庖宓牟馐浴?br />     *   负载测试:哪一个环境可以同时处理更大量的请求。‘ c( @5 D( G, }+ z( L$ M( s$ z
    *   在负载测试中,哪一方的性能会下降地更快。$ V) q" @( ~1 o‘ ?‘ A3 B, R: j$ M
    *   在各种情况下,64位平台的表现如何。% r1 x( W; r2 q* W: u
1 p" \( {( M- p: m
国内也曾经进行过PHP在Linux和Windows平台上的性能测试。微软在WordCamp China 2009大会上公开了之前与康盛创想合作进行的性能评估结果:在Windows Server 2008 + IIS上运行PHP,从平均相应时间,每秒处理的请求数,以及数据吞吐量等多方便均优于Linux + Apache的托管方式
站长资讯网
. TAG: NET ASP PHP 速度
推荐内容最近更新人气排行
关于我们 | 友情链接 | 网址推荐 | 常用资讯 | 网站地图 | RSS | 留言