【編者按】本文主要針對開源 PHP 和非開源的 ASP.NET 在性能、成本、可擴展性,技術支持和複雜性等方面進行比較。php
在網上論壇,老是有成百上千的文章和帖子在討論 PHP 和 ASP.NET,究竟誰纔是更好的平臺?不過很惋惜,大部分人的觀點老是帶有偏見的,人們總會有意無心地推廣本身喜歡的語言。html
此外,若是你注意過這些爭論帖和文章的日期,就會發現大部分的信息都是過期的。太惋惜了,這些搜索排名考前的文章提供的信息卻再也不有效。咱們還要考慮到,PHP 和 ASP.NET 都是有周期性的版本升級和優化的。程序員
筆者保證,這兩種編程語言均可以在很是龐大的 Web 應用和網站上成功使用,所以,它們處理大型網絡應用程序的能力是毋庸置疑的。數據庫
關於性能:筆者會闡述影響性能的種種因素,其結果會證實由於速度而選擇一種編程語言在大多數狀況下是毫無心義的。編程
關於可拓展性:筆者會闡述影響可拓展性的因素,但實際上,只要編程方法正確,兩種語言的可拓展性能都十分強大。瀏覽器
關於成本和技術支持:因爲 PHP 是開源的,一般運行在 LAMP(即 Linux,Apache,MYSQL 和 PHP)這些開源平臺上。所以,在提供最具成本效益的解決方案和提供大量的資源及支持方面,PHP 是優於 ASP.NET 的。緩存
關於平均部署時間(即附加成本):使用 ASP.NET 進行編碼須要的代碼量是使用 PHP 的兩倍,所以使用 PHP 部署時間成本更低,速度更快。服務器
筆者會在下面仔細說明每一個方面,而且附上看法。網絡
不管你選擇 PHP 仍是 ASP.NET 平臺,對可拓展性和易維護性都不會有任何影響。Web 應用程序的可拓展性以及易維護性主要取決於如下幾個方面:app
編程者的經驗
使用最佳的編碼實踐
使用可靠的編程框架
遵循程序設計指南和標準
關於這點,一直以來都存在許多爭論,且大部分爭論都是不客觀且片面的。這些爭論並無給你們提供真正有效的信息,只是極力吹捧一種語言而貶低另外一種。
當涉及到測量 Web 應用的速度時,值得考慮的因素很是多。以至於編程語言的運行速度,對當下大部分網站的速度和性能影響,實際上是微乎其微的。
然而,若是要用這種語言完成雅虎或者谷歌這類網站天天都在執行的龐大任務,那麼選擇一種能夠快速執行大型任務的編程語言就十分必要了,這也是谷歌和雅虎選擇多種編程語言(大部分都是開源的)的緣由,每種語言都用來執行最適合它的任務。
下面,筆者會分析各類常見和不常見的場景而且解釋哪一種任務更優。
Web 應用的一種常見的任務是對數據庫進行訪問和查詢,再把結果輸出到 Web 服務器,繼而瀏覽器。所以,在這個常見場景中,全部的編程語言都要擔當數據庫服務器和 Web 服務器之間的通訊或者是接口的角色。在此場景中,編程語言的速度對整個進程幾乎沒有影響;該進程的速度主要取決於數據庫服務器、Web 服務器,客戶端的 Web 瀏覽器和帶寬。
如果考慮經常使用的主流數據庫服務器,MySQL(如今屬於Oracle),PostgreSQL,MSSQL 和 Oracle 都在努力提高速度和性能。咱們看到,每一個版本的數據庫服務器升級都會帶來新功能和更好的性能,因此筆者認爲只要數據庫程序員使用優化的實用的 SQL 查詢,而且必要狀況下采用如緩存一類的先進功能,上述任一款數據庫服務器都會有十分優越的表現。
谷歌,Facebook,YouTube,雅虎和最近因世界盃得到龐大觀衆數量的 FIFA 都在使用 MYSQL。所以,MySQL 數據庫服務器的能力是毋庸置疑的。
基於線上的統計調查,截止至發稿時,PHP 與 MySQL 之間的通訊和接口速度要快於 ASP.NET 和 MSSQL,但並不明顯。
Web 程序的另外一種常見任務是訪問文件系統,找到一個圖像再將其發送到 Web 服務器。在這種狀況下,編程語言的任務依然不多,與編程語言交流的負擔主要落在操做系統與文件系統身上。
基於線上的統計調查,截止至發稿時,Linux 操做系統和 EXT4(文件系統)的性能優於 Windows 操做系統和 NTFS(文件系統)。
大多數的 Linux / Unix 服務器的運行都很簡約,沒有任何額外的非必需的包或 GUI 界面,所以這些操做系統只需使用不多量的 CPU 和 RAM,從而將更多的資源留給數據庫和 Web 服務器。
大多數 Windows 服務器運行十分笨重,有許多冗餘的包會佔用大量的 CPU 和 RAM。
很顯然,LAMP 平臺要比 ASP.NET 平臺更有優點,由於它有更多的可用資源。
ASP.NET 一般使用 C# 編寫。通常而言,截止到目前爲止,C# 是比 PHP 更快的編程語言。(但這種狀況也可能改變,由於編程語言會爲了提升速度而不斷升級更新)所以,假設爲了完成某次計算須要執行2,000,000次循環,那麼用 C# 編寫的 ASP.NET 程序將比 PHP 程序運行更快。然而,這是一種很是罕見的狀況,一次計算循環次數最多爲幾百次,而不是2,000,000次。並且,在這種狀況下,就應該考慮爲何要作一個2,000,000次的循環計算。
其餘與編程語言無關,但會對性能產生影響的因素還包括:
程序員在編寫代碼時的知識儲備和能力
程序員在編寫 SQL 查詢語句時的知識儲備和能力
所需實現的功能(有些功能在 ASP.NET 平臺所需的執行時間長於在 PHP 平臺所需的時間,有些則恰巧相反)
說到性能,在此不得不談及一些專業的應用性能監控工具。能夠有效的針對代碼、SQL語句等進行優化,下降代碼編寫方面對性能和速度的影響。
圖爲OneAPM上監控到的 .NET 應用程序響應時間和吞吐量數據
PHP,MySQL 服務器,PostgreSQL 服務器,Apache 服務器和 Linux 操做系統的使用和升級都是免費的。此外,另設一臺備援主機,或者須要運行多個服務器以均衡負載或搭建服務器集羣,也都沒有額外的許可費用。
LAMP (Linux, Apache, MySQL 和 PHP)在託管公司中也更受歡迎。與 Windows 主機相比,LAMP 主機的普及性使得每個月的託管費用更低。
若是你購買了 Windows 操做系統,那麼 ASP.NET 和 IIS 就是免費的。微軟的 Windows 服務器,SQL 服務器以及將來的更新價格昂貴。例如 Microsoft Server 2008 R2 64位標準版價格在1029美圓左右,而針對小型企業的 Microsoft SQL Server 2008價格在1038美圓上下。
若是這個網站變得受歡迎,有必要另設一臺備援主機,或者須要運行多個服務器以負載均衡,搭建服務器集羣,那麼上述費用將會大幅度提升。
因爲 LAMP 是開源的,世界各地專業且友好的開發者們一直在對這一開源平臺的更新和改進提供源源不斷的支持。除此以外,PHP 和 LAMP 平臺還有不少其餘的資源支持和開發者支持。
我之因此說起「友好」這個詞,是由於向開源社區作出貢獻的開發者們並非爲了獲得經濟利益。若是你在編碼過程當中遇到了功能挑戰須要尋求幫助,去 PHP 的論壇上提問,你必定會收到友好的程序員們給出的有用信息。
ASP.NET 更依賴於微軟數量有限的開發者作出的改進和更新。能幫助解決 ASP.NET 的貢獻者相對較少。
與 PHP 相比,ASP.NET 須要大量或者說更多行的代碼去完成複雜的特性和功能,在開發過程當中花費更多的時間。
此外,PHP 是在服務器端被編譯的,所以,當改變功能時,無需額外步驟就能看到改變。相反的是,ASP.NET 的代碼每次修改都須要進行編譯。也就是說,開發過程當中 ASP.NET 要比 PHP 消耗更多的時間。
PHP 和 MySQL 都有獨立編譯器的,PHP 的開發者能夠得到數量更豐富的編譯器。
大多數 ASP.NET 程序員都依賴於 Microsoft Visual Studio 編譯器開發 .NET程序。(許多 ASP.NET 程序員對 Microsoft Visual Studio 是又愛又恨)
這是徹底不一樣的編程風格——使用 PHP 的程序員及開源開發者們更喜好文本編輯器,例如 VI,VIM,Notepad ++。
VI 和 VIM 是很是高級的獨立編輯器。開發者徹底掌握這些編輯器的性能後,能夠快速、高效且獨立地進行復雜的編程。所以,他們能更加靈活地控制代碼。當涉及到使用或與 JavaScript,Ajax,JQuery 等平臺集成時,因爲熟悉開源環境且使用 VI 或 VIM 手打代碼,PHP 開發者每每更有優點。
PHP 具備平臺獨立性,能夠在 Linux,Unix,Mac OS X,Windows 中的任何平臺運行。ASP.NET 則只能在 Windows 平臺上運行。
下面的表格列出了當下流行站點所使用的平臺和語言。
Note: Please don't confuse C with C# (pronounced C Sharp) — they are completely different programming languages. ASP.net is mostly programmed in C# (C Sharp) or Visual Basic and not C.
注:請勿混淆 C 與 C#,他們是兩種徹底不一樣的編程語言。ASP.NET 一般使用 C# 或者 Visual Basic 進行編程,而非 C 語言。
站點 | 創建時間 | 服務器平臺 | 編程語言 |
---|---|---|---|
Google.com | November 1998 | Linux | C, Java, C++, PHP & MySQL |
Facebook.com | February 2004 | Linux | PHP, MySQL and C++ |
YouTube.com February 2005 | Linux | C, Java and MySQL | |
Yahoo.com | August 1995 | Linux | C++, C, Java, PHP & MySQL |
MSN.com (owned by Microsoft) | August 1995 | Windows | ASP.net |
Live.com (owned by Microsoft) | August 2008 | Windows | ASP.net |
Wikipedia | January 2001 | Linux | PHP & MySQL |
Amazon.com | October 1995 | Linux & Solaris | C++, Java, J2EE |
WordPress.com | November 2005 | Linux | PHP & MySQL |
LAMP 平臺要比 Windows 平臺更加流行。基於 Netcraft 2010年7月針對205,714,253個 Web 服務器進行的數據調研顯示,有112,945,968(54.90%)的 Web 服務器託管在 Apache 上,有53,217,620(25.87%)的 Web 服務器託管在 Windows 上,剩餘的則託管在其餘平臺上。
關於 Linux 的不友善誤傳已久。
實際上,這取決於使用者的平臺搭建經驗和知識儲備程度。
但不得不說,時下流行的改進後的 Linux 發行版給筆者留下了深入的印象。諸如 Ubuntu,小紅帽,CentOS,openSUSE 以及 Fedora 等發行版,不只易於安裝部署,還提供簡單直接的 GUI 界面,使得配置 Linux 服務器變得更加簡單易行。
很惋惜,在筆者看來,微軟的服務器在可用性上日漸衰落,服務器管理變得愈加笨拙,而且充斥着許多沒必要要的功能。