做者 趙劼 發佈於 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,寫有技術博客「老趙點滴」。關注前沿技術,並致力於開源社區與微軟平臺的組合優化。