掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
有關(guān)ASP.NET和PHP的執(zhí)行速度,一般第一印象會(huì)覺得PHP比較快。上個(gè)月有一篇Joe Stagner的博文對(duì)ASP.NET和PHP的執(zhí)行速度進(jìn)行了又一番比較,結(jié)果是ASP.NET性能較優(yōu)(這在Justin James的博文上也提到過,因此也曾關(guān)注過)。不過這還沒完:這樣的話題一定會(huì)引來很多討論,而Joe也進(jìn)行了第二輪測(cè)試。于是近日,InfoQ的趙劼又對(duì)雙方的論戰(zhàn)進(jìn)行了總結(jié)如下:

在寶山等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需網(wǎng)站策劃,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,全網(wǎng)整合營(yíng)銷推廣,外貿(mào)網(wǎng)站制作,寶山網(wǎng)站建設(shè)費(fèi)用合理。
上個(gè)月Joe Stagner在博客上發(fā)表了一系列文章比較了PHP和ASP.NET的執(zhí)行性能,引起了來自雙方程序員的大量回應(yīng)。Joe表示,他會(huì)將這樣的測(cè)試持續(xù)下去,并尋求更為合適的方式,以獲得對(duì)實(shí)際項(xiàng)目來說盡可能有參考價(jià)值的結(jié)論。
Joe表示:
一般來說,作性能測(cè)試的目的是要嘗試證明一方比令一方要快。我受雇于微軟,同時(shí)編寫PHP和ASP.NET代碼。我在.NET出現(xiàn)之前就在使用PHP,兩個(gè)東西我都很喜歡。
所以,我很難說出哪個(gè)更好。當(dāng)我說PHP好話時(shí),我的微軟同事們會(huì)寫信來批評(píng)我,而當(dāng)我發(fā)表傾向于ASP.NET的言論時(shí),我的PHP朋友們會(huì)說我是微軟的托。
我進(jìn)行這個(gè)測(cè)試是因?yàn)槊總€(gè)人都對(duì)PHP的性能有自己的看法(Windows vs. Linux & 5.2 vs. 5.3),卻沒人能給出明確的數(shù)據(jù)。
根據(jù)Joe的描述,測(cè)試環(huán)境如下:
從實(shí)驗(yàn)結(jié)果上看,PHP在Linux和Windows的執(zhí)行性能各有千秋:
Joe認(rèn)為,這表示:
在Joe看來,全面來看,PHP和IIS團(tuán)隊(duì)在執(zhí)行性能上已經(jīng)做的非常成功,接下來就需要各開源程序的團(tuán)隊(duì)(Drupal、WordPress、Joomla等等)為各平臺(tái)進(jìn)行性能優(yōu)化了。
不過,除了文件復(fù)制操作之外,ASP.NET在性能方面全面領(lǐng)先于PHP(無論部署在Linux還是Windows上面):
對(duì)于這個(gè)測(cè)試結(jié)果,Joe補(bǔ)充道:
我知道我的一些PHP朋友和Linux伙計(jì)們要跳出來駁斥我的測(cè)試和結(jié)果了。:)
我一直在思考,這樣的性能比較是否需要加入一些高級(jí)的優(yōu)化選項(xiàng)。不過.NET方面也有例如多線程,異步請(qǐng)求,和各種緩存方式可以使用
請(qǐng)注意——我并沒有說“ASP.NET更快,所以你不應(yīng)該使用PHP!”,我使用認(rèn)為,PHP過于簡(jiǎn)單導(dǎo)致對(duì)某些高級(jí)應(yīng)用來說有些舉步維艱,就像ASP.NET在項(xiàng)目早期會(huì)有學(xué)習(xí)方面的復(fù)雜性。
對(duì)我來說,PHP最令人興奮的地方不是它的語(yǔ)言/平臺(tái),而是成千上萬聰明的PHP開發(fā)人員,以及各種優(yōu)秀的項(xiàng)目(如Drupal、Joomla、WordPress、PHPBB、Nuke等等)。
可以這么認(rèn)為,PHP在Windows和Linux上的性能處于同一個(gè)水平上,我現(xiàn)在終于可以為Windows編寫那些我盼望著許多年的PHP類庫(kù)了。
Joe還公開了測(cè)試代碼。他表示,如果你對(duì)這個(gè)測(cè)試的結(jié)果有疑義,可以親自進(jìn)行這個(gè)實(shí)驗(yàn),或是編寫你自己的測(cè)試代碼進(jìn)行試驗(yàn)。
文章發(fā)布之后,許多網(wǎng)友對(duì)這一測(cè)試結(jié)果發(fā)表了看法。Joe基本上逐一回復(fù)了其中的主要觀點(diǎn):
“我使用ASP.NET只是因?yàn)槲蚁矚gVisual Studio IDE”——我個(gè)人認(rèn)為Visual Studio是最有生產(chǎn)力的開發(fā)工具。但是,PHP的有不錯(cuò)的選擇。我使用Zend Studio,PHPEd,Komodo,Delphi for PHP,這些都很不錯(cuò)。我討厭Eclipse,不過Zend也在這方面為PHP開發(fā)做了不少擴(kuò)展。
應(yīng)該比較ASP的性能——不用了,謝謝。舊式的ASP與目前的PHP與ASP.NET差距太大了。做這種比較,似乎是在建議使用ASP開發(fā)新項(xiàng)目,我強(qiáng)烈不建議你這么做。
32位與64位系統(tǒng)之間的比較——這些測(cè)試的目的并不是為了體現(xiàn)64位系統(tǒng)上的性能差距。今后的測(cè)試我會(huì)增加64位的場(chǎng)景。
“PHP丑陋至極”——哦,我不同意。舊式ASP要丑陋多了。你可以寫出非??膳露舐腜HP代碼,也可以寫出丑陋而可怕的C#或VB代碼。同樣,你也可以寫出優(yōu)雅的C++樣式的PHP。這完全只和開發(fā)人員的技能有關(guān)。
應(yīng)該使用Windows上的Apache進(jìn)行測(cè)試——Apache是Linux上的服務(wù)器,不過我認(rèn)為如果你在Windows上不使用IIS 7則會(huì)損失太多太多東西了。
“有辦法在Win2K8中,在不損失安全性的前提下加快文件復(fù)制性能嗎?”——似乎不行。我認(rèn)為這涉及到Windows服務(wù)器上的ACL系統(tǒng)。我以后可能會(huì)測(cè)試通過數(shù)據(jù)流讀取文件的性能,有些東西的性能可能會(huì)有所改善。不過,Web應(yīng)用程序一般不會(huì)編程來復(fù)制大量文件。
“PHP一直是,也永遠(yuǎn)只是一個(gè)半專業(yè)性質(zhì)的環(huán)境”——這種說法狗屁不通。PHP平臺(tái)上有許多專業(yè)的,高質(zhì)量的應(yīng)用程序,也有很多我非常尊敬的開發(fā)人員。是否專業(yè)是開發(fā)人員的問題,不是PHP或ASP.NET的問題。
“我認(rèn)為比較沒有opcode緩存的PHP很不公平,.NET是編譯執(zhí)行的,而PHP需要每次都解釋并‘編譯’頁(yè)面”——我同意這個(gè)測(cè)試可能不夠完整,但是我不認(rèn)同這個(gè)邏輯。我測(cè)試PHP的方式,就和下載安裝的方式一樣。我的虛擬主機(jī)也沒有安裝op-code緩存。而事實(shí)上,ASP.NET自帶這個(gè)特性也并不意味著測(cè)試是不公平的,這是因?yàn)镻HP缺少這個(gè)特性——不過這個(gè)要求很合理,我正在準(zhǔn)備新的測(cè)試。
“說PHP不是一個(gè)‘專業(yè)的’語(yǔ)言很沒道理,因?yàn)閹缀跛凶畲蟮恼军c(diǎn)都是用PHP構(gòu)建的”——這種說法是沒道理,不過說那些站點(diǎn)“幾乎都是”用PHP構(gòu)建的也是錯(cuò)誤的。有些是,有些不是。
Joe補(bǔ)充道:
如果你們看到這一數(shù)據(jù)之后對(duì)ASP.NET信心倍增我自然很高興。如果我不認(rèn)為.NET是開發(fā)Web應(yīng)用程序來說是一種更好的選擇——至少不屬于其它平臺(tái),那么我也不會(huì)在微軟工作了。
但是……如果你因?yàn)檫@些數(shù)據(jù)而忽視PHP,也是錯(cuò)誤且幼稚的行為。
從純技術(shù)角度來說,我認(rèn)為.NET遠(yuǎn)比PHP強(qiáng)大,但這并不意味著PHP不夠強(qiáng)大。在我看來,PHP的力量體現(xiàn)在眾多的應(yīng)用程序以及可用的框架。
大約一周以后,Joe公開了第二次測(cè)試的結(jié)果。與前一個(gè)測(cè)試相比,第二個(gè)測(cè)試主要有以下兩個(gè)改變:
對(duì)于第二次測(cè)試及其結(jié)果,Joe解釋到:
從結(jié)果上看,Ubuntu和Debian上運(yùn)行PHP的性能差距可以忽略不計(jì)。部分條目的性能有些細(xì)小的改進(jìn),有些則有25%的提高,但是總體來說其效果比我想象中要來得低。
使用APC之后,一些條目的運(yùn)行反而變慢了,不過我認(rèn)為這只是機(jī)器所造成的誤差。請(qǐng)注意,表格中顯示的不是第一次的結(jié)果,都是經(jīng)過兩次刷新,確認(rèn)是在緩存命中時(shí)得到的結(jié)果。
我認(rèn)為現(xiàn)在的測(cè)試非常公平。
空的循環(huán)測(cè)試和空的函數(shù)執(zhí)行非常重要,因?yàn)檫@反映了語(yǔ)言或平臺(tái)的基礎(chǔ)消耗。這是處頁(yè)面?zhèn)鬏數(shù)刃阅荛_銷外的性能消耗,是一個(gè)重要的考慮方面。
我的一些PHP朋友也認(rèn)可這個(gè)測(cè)試的準(zhǔn)確性,不過給出了非常有見解的補(bǔ)充:
- ASP.NET在性能上的領(lǐng)先不會(huì)對(duì)我有什么影響。PHP是我的最愛,我的應(yīng)用程序已經(jīng)足夠快了。
- 沒錯(cuò),ASP.NET在基礎(chǔ)性能上是比較快,但是我的應(yīng)用程序可以通過優(yōu)秀的頁(yè)面實(shí)現(xiàn)和JavaScript實(shí)踐把這部分性能補(bǔ)回來。
- 我在進(jìn)行Drupal開發(fā),我對(duì)PHP最熟悉,因此我寧愿多花一些硬件來保持更好的開發(fā)效率。
這些都是很不錯(cuò)的評(píng)論!
此外,根據(jù)上一次實(shí)驗(yàn)的結(jié)果,在Windows平臺(tái)上運(yùn)行PHP時(shí),在MySQL和文件的訪問上有一些性能問題,微軟許多團(tuán)隊(duì)都向我獲取了相關(guān)信息。希望這些數(shù)據(jù)都?jí)蜣D(zhuǎn)變?yōu)榍袑?shí)的改進(jìn)。
Joe表示,他將收集大家認(rèn)為更公平,更有意義的測(cè)試場(chǎng)景。以下是他所計(jì)劃的測(cè)試項(xiàng)目:
國(guó)內(nèi)也曾經(jīng)進(jìn)行過PHP在Linux和Windows平臺(tái)上的性能測(cè)試。InfoQ曾經(jīng)報(bào)道過微軟在WordCamp China 2009大會(huì)上公開了之前與康盛創(chuàng)想合作進(jìn)行的性能評(píng)估結(jié)果:在Windows Server 2008 + IIS上運(yùn)行PHP,從平均相應(yīng)時(shí)間,每秒處理的請(qǐng)求數(shù),以及數(shù)據(jù)吞吐量等多方便均優(yōu)于Linux + Apache的托管方式。
對(duì)于ASP.NET和PHP的性能比較,你有什么看法么?
【編輯推薦】

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流