ASP.NET vs. PHP,哪個更快?

來源:互聯網
上載者:User

上個月Joe Stagner在部落格上發表了一系列文章比較了PHP和ASP.NET的執行效能,引起了來自雙方程式員的大量回應。Joe表示,他會將這樣的測試持續下去,並尋求更為合適的方式,以獲得對實際項目來說儘可能有參考價值的結論。

Joe表示:

一般來說,作效能測試的目的是要嘗試證明一方比令一方要快。我受雇於微軟,同時編寫PHP和ASP.NET代碼。我在.NET出現之前就在使用PHP,兩個東西我都很喜歡。

所以,我很難說出哪個更好。當我說PHP好話時,我的微軟同事們會寫信來批評我,而當我發表傾向於ASP.NET的言論時,我的PHP朋友們會說我是微軟的托。

我進行這個測試是因為每個人都對PHP的效能有自己的看法(Windows vs. Linux & 5.2 vs. 5.3),卻沒人能給出明確的資料。

根據Joe的描述,測試環境如下:

  • 所有的測試都在同一台機器上運行(擁有4G記憶體和60G 7200轉硬碟的Toshiba Tecra M5)。
  • Ubuntu 9和Windows Server 2008標準版分別安裝於獨立(但相同)的硬碟中。
  • Linux使用Apache2,Windows使用IIS 7作為各自的Web伺服器。
  • 雙方的作業系統都進行了完整的patch或升級。
  • 雙方的系統和運行時都沒有進行額外的效能增強。

從實驗結果上看,PHP在Linux和Windows的執行效能各有千秋:

  • 純粹的語句執行在Windows上表現更好。
  • 函數調用在Windows上更快。
  • 對象的建立和訪問,對於PHP 5.2來說在Linux上更快,但是對於PHP 5.3來說則是Windows更快。
  • 類庫調用在Linux上快得多(如在Ubuntu上進行加密要比Windows要快3到5倍)。
  • 在Linux上訪問檔案效能略高於Windows,不過Windows上檔案複製的效能要比Linux慢60%,可能是ACL進階安全的緣故。
  • 在Linux上訪問MySQL要比Windows快不少,而且在Windows上運行PHP 5.3的情況則更為惡劣(不過從下面PostgreSQL的情況上來看,這應該是糟糕實現的緣故)。
  • PostgreSQL在兩個平台上的效能非常接近(1000個操作的差距在0.06秒之內)——無論是PHP 5.3還是PHP 5.2,Windows上表現都略勝一籌。
  • Windows上PHP 5.2訪問MS SQL Server的效能稍遜於在Linux上訪問MySQL(此時還沒有面向PHP 5.3的SQL Server支援)。

Joe認為,這表示:

  • 我們可以這麼認為,對於純粹的PHP執行效能來說,Linux和Windows相差無幾,這不會成為選擇Linux或Windows作為部署平台的決定性因素。
  • 如果你在構建一個應用程式,那麼PostgreSQL可能是更好的選擇。因為它在兩個平台上的表現都很優秀。
  • 如果你的應用程式必須使用MySQL,那麼選擇Windows就需要早些計劃擴充性問題了(個人認為Sun不太可能為Windows最佳化MySQL的效能)。
  • PHP的第一個版本的SQL Server驅動程式要比MySQL或PostpreSQL要慢一些,但這應該不會成為問題。第二個版本的磁碟機正在開發之中,它會帶來效能提升。

在Joe看來,全面來看,PHP和IIS團隊在執行效能上已經做的非常成功,接下來就需要各開來源程式的團隊(Drupal、WordPress、Joomla等等)為各平台進行效能最佳化了。

不過,除了檔案複製操作之外,ASP.NET在效能方面全面領先於PHP(無論部署在Linux還是Windows上面):

  • Linux上訪問MySQL的效能稍稍優於Windows上訪問SQL Server的效能(使用普通的資料類型和SELECT語句)。但是這裡的差距幾乎可以忽略不計。
  • ASP.NET(C#)操作,如對象使用,類庫調用等等,其效能都遠高於PHP。

對於這個測試結果,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公開了第二次測試的結果。與前一個測試相比,第二個測試主要有以下兩個改變:

  1. 為Linux和Windows上安裝了op-code緩衝,並重新運行了大部分測試。
  2. 由於一些依賴項的問題,PHP 5.3 + APC的測試平台變成了Debain 5作業系統。

對於第二次測試及其結果,Joe解釋到:

從結果上看,Ubuntu和Debian上運行PHP的效能差距可以忽略不計。部分條目的效能有些細小的改進,有些則有25%的提高,但是總體來說其效果比我想象中要來得低。

使用APC之後,一些條目的運行反而變慢了,不過我認為這隻是機器所造成的誤差。請注意,表格中顯示的不是第一次的結果,都是經過兩次重新整理,確認是在快取命中時得到的結果。

我認為現在的測試非常公平。

空的迴圈測試和空的函數執行非常重要,因為這反映了語言或平台的基礎消耗。這是處頁面傳輸等效能開銷外的效能消耗,是一個重要的考慮方面。

我的一些PHP朋友也認可這個測試的準確性,不過給出了非常有見解的補充:

  • ASP.NET在效能上的領先不會對我有什麼影響。PHP是我的最愛,我的應用程式已經足夠快了。
  • 沒錯,ASP.NET在基礎效能上是比較快,但是我的應用程式可以通過優秀的頁面實現和JavaScript實踐把這部分效能補回來。
  • 我在進行Drupal開發,我對PHP最熟悉,因此我寧願多花一些硬體來保持更好的開發效率。

這些都是很不錯的評論!

此外,根據上一次實驗的結果,在Windows平台上運行PHP時,在MySQL和檔案的訪問上有一些效能問題,微軟許多團隊都向我擷取了相關資訊。希望這些資料都夠轉變為切實的改進。

Joe表示,他將收集大家認為更公平,更有意義的測試情境。以下是他所計劃的測試專案:

  • 實際頁面測試:迴圈,寒暑調用和對象操作是一類測試,不過頁面的整體呈現則是另一種有意義的測試。
  • 負載測試:哪一個環境可以同時處理更大量的請求。
  • 在負載測試中,哪一方的效能會下降地更快。
  • 在各種情況下,64位平台的表現如何。

國內也曾經進行過PHP在Linux和Windows平台上的效能測試。InfoQ曾經報道過微軟在WordCamp China 2009大會上公開了之前與康盛創想合作進行的效能評估結果:在Windows Server 2008 + IIS上運行PHP,從平均相應時間,每秒處理的請求數,以及資料輸送量等多方便均優於Linux + Apache的託管方式。

您的看法如何?您希望看到什麼樣的測試呢?

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.