摘要:谷歌,,,雅虎和最近因世界杯獲得龐大觀眾數(shù)量的都在使用。因此,數(shù)據(jù)庫(kù)服務(wù)器的能力是毋庸置疑的。微軟的服務(wù)器,服務(wù)器以及未來(lái)的更新價(jià)格昂貴。更依賴于微軟數(shù)量有限的開(kāi)發(fā)者做出的改進(jìn)和更新。
【編者按】本文主要針對(duì)開(kāi)源 PHP 和非開(kāi)源的 ASP.NET 在性能、成本、可擴(kuò)展性,技術(shù)支持和復(fù)雜性等方面進(jìn)行比較。
在網(wǎng)上論壇,總是有成百上千的文章和帖子在討論 PHP 和 ASP.NET,究竟誰(shuí)才是更好的平臺(tái)?不過(guò)很可惜,大部分人的觀點(diǎn)總是帶有偏見(jiàn)的,人們總會(huì)有意無(wú)意地推廣自己喜歡的語(yǔ)言。
此外,如果你注意過(guò)這些爭(zhēng)論帖和文章的日期,就會(huì)發(fā)現(xiàn)大部分的信息都是過(guò)時(shí)的。太可惜了,這些搜索排名考前的文章提供的信息卻不再有效。我們還要考慮到,PHP 和 ASP.NET 都是有周期性的版本升級(jí)和優(yōu)化的。
筆者保證,這兩種編程語(yǔ)言都可以在非常龐大的 Web 應(yīng)用和網(wǎng)站上成功使用,因此,它們處理大型網(wǎng)絡(luò)應(yīng)用程序的能力是毋庸置疑的。
內(nèi)容提要:關(guān)于性能:筆者會(huì)闡述影響性能的種種因素,其結(jié)果會(huì)證明因?yàn)樗俣榷x擇一種編程語(yǔ)言在大多數(shù)情況下是毫無(wú)意義的。
關(guān)于可拓展性:筆者會(huì)闡述影響可拓展性的因素,但實(shí)際上,只要編程方法正確,兩種語(yǔ)言的可拓展性能都十分強(qiáng)大。
關(guān)于成本和技術(shù)支持:由于 PHP 是開(kāi)源的,通常運(yùn)行在 LAMP(即 Linux,Apache,MYSQL 和 PHP)這些開(kāi)源平臺(tái)上。因此,在提供最具成本效益的解決方案和提供大量的資源及支持方面,PHP 是優(yōu)于 ASP.NET 的。
關(guān)于平均部署時(shí)間(即附加成本):使用 ASP.NET 進(jìn)行編碼需要的代碼量是使用 PHP 的兩倍,因此使用 PHP 部署時(shí)間成本更低,速度更快。
筆者會(huì)在下面仔細(xì)說(shuō)明每個(gè)方面,并且附上見(jiàn)解。
1.可拓展性和易維護(hù)性無(wú)論你選擇 PHP 還是 ASP.NET 平臺(tái),對(duì)可拓展性和易維護(hù)性都不會(huì)有任何影響。Web 應(yīng)用程序的可拓展性以及易維護(hù)性主要取決于以下幾個(gè)方面:
編程者的經(jīng)驗(yàn)
使用最佳的編碼實(shí)踐
使用可靠的編程框架
遵循程序設(shè)計(jì)指南和標(biāo)準(zhǔn)
2.性能和速度關(guān)于這點(diǎn),一直以來(lái)都存在許多爭(zhēng)論,且大部分爭(zhēng)論都是不客觀且片面的。這些爭(zhēng)論并沒(méi)有給大家提供真正有效的信息,只是極力吹捧一種語(yǔ)言而貶低另一種。
當(dāng)涉及到測(cè)量 Web 應(yīng)用的速度時(shí),值得考慮的因素非常多。以致于編程語(yǔ)言的運(yùn)行速度,對(duì)當(dāng)下大部分網(wǎng)站的速度和性能影響,其實(shí)是微乎其微的。
然而,如果要用這種語(yǔ)言完成雅虎或者谷歌這類網(wǎng)站每天都在執(zhí)行的龐大任務(wù),那么選擇一種可以快速執(zhí)行大型任務(wù)的編程語(yǔ)言就十分必要了,這也是谷歌和雅虎選擇多種編程語(yǔ)言(大部分都是開(kāi)源的)的原因,每種語(yǔ)言都用來(lái)執(zhí)行最適合它的任務(wù)。
下面,筆者會(huì)分析各種常見(jiàn)和不常見(jiàn)的場(chǎng)景并且解釋哪種任務(wù)更優(yōu)。
第一種常見(jiàn)情況Web 應(yīng)用的一種常見(jiàn)的任務(wù)是對(duì)數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn)和查詢,再把結(jié)果輸出到 Web 服務(wù)器,繼而瀏覽器。因此,在這個(gè)常見(jiàn)場(chǎng)景中,所有的編程語(yǔ)言都要擔(dān)當(dāng)數(shù)據(jù)庫(kù)服務(wù)器和 Web 服務(wù)器之間的通信或者是接口的角色。在此場(chǎng)景中,編程語(yǔ)言的速度對(duì)整個(gè)進(jìn)程幾乎沒(méi)有影響;該進(jìn)程的速度主要取決于數(shù)據(jù)庫(kù)服務(wù)器、Web 服務(wù)器,客戶端的 Web 瀏覽器和帶寬。
若是考慮常用的主流數(shù)據(jù)庫(kù)服務(wù)器,MySQL(現(xiàn)在屬于Oracle),PostgreSQL,MSSQL 和 Oracle 都在努力提升速度和性能。我們看到,每個(gè)版本的數(shù)據(jù)庫(kù)服務(wù)器升級(jí)都會(huì)帶來(lái)新功能和更好的性能,所以筆者認(rèn)為只要數(shù)據(jù)庫(kù)程序員使用優(yōu)化的實(shí)用的 SQL 查詢,并且必要情況下采用如緩存一類的先進(jìn)功能,上述任一款數(shù)據(jù)庫(kù)服務(wù)器都會(huì)有十分優(yōu)越的表現(xiàn)。
谷歌,F(xiàn)acebook,YouTube,雅虎和最近因世界杯獲得龐大觀眾數(shù)量的 FIFA 都在使用 MYSQL。因此,MySQL 數(shù)據(jù)庫(kù)服務(wù)器的能力是毋庸置疑的。
基于線上的統(tǒng)計(jì)調(diào)查,截止至發(fā)稿時(shí),PHP 與 MySQL 之間的通信和接口速度要快于 ASP.NET 和 MSSQL,但并不明顯。
第二種常見(jiàn)情況Web 程序的另一種常見(jiàn)任務(wù)是訪問(wèn)文件系統(tǒng),找到一個(gè)圖像再將其發(fā)送到 Web 服務(wù)器。在這種情況下,編程語(yǔ)言的任務(wù)依然很少,與編程語(yǔ)言交流的負(fù)擔(dān)主要落在操作系統(tǒng)與文件系統(tǒng)身上。
基于線上的統(tǒng)計(jì)調(diào)查,截止至發(fā)稿時(shí),Linux 操作系統(tǒng)和 EXT4(文件系統(tǒng))的性能優(yōu)于 Windows 操作系統(tǒng)和 NTFS(文件系統(tǒng))。
第三種常見(jiàn)情況大多數(shù)的 Linux / Unix 服務(wù)器的運(yùn)行都很簡(jiǎn)約,沒(méi)有任何額外的非必需的包或 GUI 界面,因此這些操作系統(tǒng)只需使用很少量的 CPU 和 RAM,從而將更多的資源留給數(shù)據(jù)庫(kù)和 Web 服務(wù)器。
大多數(shù) Windows 服務(wù)器運(yùn)行十分笨重,有許多冗余的包會(huì)占用大量的 CPU 和 RAM。
很顯然,LAMP 平臺(tái)要比 ASP.NET 平臺(tái)更有優(yōu)勢(shì),因?yàn)樗懈嗟目捎觅Y源。
第四種 不太常見(jiàn)的情況ASP.NET 通常使用 C# 編寫。一般而言,截止到目前為止,C# 是比 PHP 更快的編程語(yǔ)言。(但這種情況也可能改變,因?yàn)榫幊陶Z(yǔ)言會(huì)為了提高速度而不斷升級(jí)更新)因此,假設(shè)為了完成某次計(jì)算需要執(zhí)行2,000,000次循環(huán),那么用 C# 編寫的 ASP.NET 程序?qū)⒈?PHP 程序運(yùn)行更快。然而,這是一種非常罕見(jiàn)的情況,一次計(jì)算循環(huán)次數(shù)最多為幾百次,而不是2,000,000次。而且,在這種情況下,就應(yīng)該考慮為什么要做一個(gè)2,000,000次的循環(huán)計(jì)算。
其他與編程語(yǔ)言無(wú)關(guān),但會(huì)對(duì)性能產(chǎn)生影響的因素還包括:
程序員在編寫代碼時(shí)的知識(shí)儲(chǔ)備和能力
程序員在編寫 SQL 查詢語(yǔ)句時(shí)的知識(shí)儲(chǔ)備和能力
所需實(shí)現(xiàn)的功能(有些功能在 ASP.NET 平臺(tái)所需的執(zhí)行時(shí)間長(zhǎng)于在 PHP 平臺(tái)所需的時(shí)間,有些則恰巧相反)
說(shuō)到性能,在此不得不談及一些專業(yè)的應(yīng)用性能監(jiān)控工具??梢杂行У尼槍?duì)代碼、SQL語(yǔ)句等進(jìn)行優(yōu)化,降低代碼編寫方面對(duì)性能和速度的影響。
appDynamics
NewRelic
OneAPM
圖為OneAPM上監(jiān)控到的 .NET 應(yīng)用程序響應(yīng)時(shí)間和吞吐量數(shù)據(jù)
PHP,MySQL 服務(wù)器,PostgreSQL 服務(wù)器,Apache 服務(wù)器和 Linux 操作系統(tǒng)的使用和升級(jí)都是免費(fèi)的。此外,另設(shè)一臺(tái)備援主機(jī),或者需要運(yùn)行多個(gè)服務(wù)器以均衡負(fù)載或搭建服務(wù)器集群,也都沒(méi)有額外的許可費(fèi)用。
LAMP (Linux, Apache, MySQL 和 PHP)在托管公司中也更受歡迎。與 Windows 主機(jī)相比,LAMP 主機(jī)的普及性使得每月的托管費(fèi)用更低。
如果你購(gòu)買了 Windows 操作系統(tǒng),那么 ASP.NET 和 IIS 就是免費(fèi)的。微軟的 Windows 服務(wù)器,SQL 服務(wù)器以及未來(lái)的更新價(jià)格昂貴。例如 Microsoft Server 2008 R2 64位標(biāo)準(zhǔn)版價(jià)格在1029美元左右,而針對(duì)小型企業(yè)的 Microsoft SQL Server 2008價(jià)格在1038美元上下。
如果這個(gè)網(wǎng)站變得受歡迎,有必要另設(shè)一臺(tái)備援主機(jī),或者需要運(yùn)行多個(gè)服務(wù)器以負(fù)載均衡,搭建服務(wù)器集群,那么上述費(fèi)用將會(huì)大幅度提高。
4.支持和資源由于 LAMP 是開(kāi)源的,世界各地專業(yè)且友好的開(kāi)發(fā)者們一直在對(duì)這一開(kāi)源平臺(tái)的更新和改進(jìn)提供源源不斷的支持。除此之外,PHP 和 LAMP 平臺(tái)還有很多其他的資源支持和開(kāi)發(fā)者支持。
我之所以提及“友好”這個(gè)詞,是因?yàn)橄蜷_(kāi)源社區(qū)做出貢獻(xiàn)的開(kāi)發(fā)者們并不是為了得到經(jīng)濟(jì)利益。如果你在編碼過(guò)程中遇到了功能挑戰(zhàn)需要尋求幫助,去 PHP 的論壇上提問(wèn),你一定會(huì)收到友好的程序員們給出的有用信息。
ASP.NET 更依賴于微軟數(shù)量有限的開(kāi)發(fā)者做出的改進(jìn)和更新。能幫助解決 ASP.NET 的貢獻(xiàn)者相對(duì)較少。
5.部署時(shí)間與 PHP 相比,ASP.NET 需要大量或者說(shuō)更多行的代碼去完成復(fù)雜的特性和功能,在開(kāi)發(fā)過(guò)程中花費(fèi)更多的時(shí)間。
此外,PHP 是在服務(wù)器端被編譯的,因此,當(dāng)改變功能時(shí),無(wú)需額外步驟就能看到改變。相反的是,ASP.NET 的代碼每次修改都需要進(jìn)行編譯。也就是說(shuō),開(kāi)發(fā)過(guò)程中 ASP.NET 要比 PHP 消耗更多的時(shí)間。
6.編譯器和工具PHP 和 MySQL 都有獨(dú)立編譯器的,PHP 的開(kāi)發(fā)者可以獲得數(shù)量更豐富的編譯器。
大多數(shù) ASP.NET 程序員都依賴于 Microsoft Visual Studio 編譯器開(kāi)發(fā) .NET程序。(許多 ASP.NET 程序員對(duì) Microsoft Visual Studio 是又愛(ài)又恨)
這是完全不同的編程風(fēng)格——使用 PHP 的程序員及開(kāi)源開(kāi)發(fā)者們更喜愛(ài)文本編輯器,例如 VI,VIM,Notepad ++。
VI 和 VIM 是非常高級(jí)的獨(dú)立編輯器。開(kāi)發(fā)者完全掌握這些編輯器的性能后,可以快速、高效且獨(dú)立地進(jìn)行復(fù)雜的編程。因此,他們能更加靈活地控制代碼。當(dāng)涉及到使用或與 JavaScript,Ajax,JQuery 等平臺(tái)集成時(shí),由于熟悉開(kāi)源環(huán)境且使用 VI 或 VIM 手打代碼,PHP 開(kāi)發(fā)者往往更有優(yōu)勢(shì)。
7.平臺(tái)獨(dú)立性PHP 具有平臺(tái)獨(dú)立性,可以在 Linux,Unix,Mac OS X,Windows 中的任何平臺(tái)運(yùn)行。ASP.NET 則只能在 Windows 平臺(tái)上運(yùn)行。
8.熱門網(wǎng)站都運(yùn)行在什么平臺(tái)上?下面的表格列出了當(dāng)下流行站點(diǎn)所使用的平臺(tái)和語(yǔ)言。
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.
注:請(qǐng)勿混淆 C 與 C#,他們是兩種完全不同的編程語(yǔ)言。ASP.NET 通常使用 C# 或者 Visual Basic 進(jìn)行編程,而非 C 語(yǔ)言。
站點(diǎn) | 建立時(shí)間 | 服務(wù)器平臺(tái) | 編程語(yǔ)言 |
---|---|---|---|
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 平臺(tái)要比 Windows 平臺(tái)更加流行?;?Netcraft 2010年7月針對(duì)205,714,253個(gè) Web 服務(wù)器進(jìn)行的數(shù)據(jù)調(diào)研顯示,有112,945,968(54.90%)的 Web 服務(wù)器托管在 Apache 上,有53,217,620(25.87%)的 Web 服務(wù)器托管在 Windows 上,剩余的則托管在其他平臺(tái)上。
10.可用性和易部署性關(guān)于 Linux 的不友善誤傳已久。
實(shí)際上,這取決于使用者的平臺(tái)搭建經(jīng)驗(yàn)和知識(shí)儲(chǔ)備程度。
但不得不說(shuō),時(shí)下流行的改進(jìn)后的 Linux 發(fā)行版給筆者留下了深刻的印象。諸如 Ubuntu,小紅帽,CentOS,openSUSE 以及 Fedora 等發(fā)行版,不僅易于安裝部署,還提供簡(jiǎn)單直接的 GUI 界面,使得配置 Linux 服務(wù)器變得更加簡(jiǎn)單易行。
很可惜,在筆者看來(lái),微軟的服務(wù)器在可用性上日漸衰落,服務(wù)器管理變得越發(fā)笨拙,并且充斥著許多不必要的功能。
原文地址:http://www.comentum.com/php-vs-asp.net-comparison.html
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/21301.html
摘要:平日學(xué)習(xí)接觸過(guò)的網(wǎng)站積累,以每月的形式發(fā)布。年以前看這個(gè)網(wǎng)址概況在線地址前端開(kāi)發(fā)群月報(bào)提交原則技術(shù)文章新的為主。 平日學(xué)習(xí)接觸過(guò)的網(wǎng)站積累,以每月的形式發(fā)布。2017年以前看這個(gè)網(wǎng)址:http://www.kancloud.cn/jsfron... 概況 在線地址:http://www.kancloud.cn/jsfront/month/82796 JS前端開(kāi)發(fā)群月報(bào) 提交原則: 技...
摘要:平日學(xué)習(xí)接觸過(guò)的網(wǎng)站積累,以每月的形式發(fā)布。年以前看這個(gè)網(wǎng)址概況在線地址前端開(kāi)發(fā)群月報(bào)提交原則技術(shù)文章新的為主。 平日學(xué)習(xí)接觸過(guò)的網(wǎng)站積累,以每月的形式發(fā)布。2017年以前看這個(gè)網(wǎng)址:http://www.kancloud.cn/jsfron... 概況 在線地址:http://www.kancloud.cn/jsfront/month/82796 JS前端開(kāi)發(fā)群月報(bào) 提交原則: 技...
摘要:平日學(xué)習(xí)接觸過(guò)的網(wǎng)站積累,以每月的形式發(fā)布。年以前看這個(gè)網(wǎng)址概況在線地址前端開(kāi)發(fā)群月報(bào)提交原則技術(shù)文章新的為主。 平日學(xué)習(xí)接觸過(guò)的網(wǎng)站積累,以每月的形式發(fā)布。2017年以前看這個(gè)網(wǎng)址:http://www.kancloud.cn/jsfron... 概況 在線地址:http://www.kancloud.cn/jsfront/month/82796 JS前端開(kāi)發(fā)群月報(bào) 提交原則: 技...
閱讀 976·2021-09-27 13:36
閱讀 954·2021-09-08 09:35
閱讀 1102·2021-08-12 13:25
閱讀 1467·2019-08-29 16:52
閱讀 2939·2019-08-29 15:12
閱讀 2757·2019-08-29 14:17
閱讀 2652·2019-08-26 13:57
閱讀 1042·2019-08-26 13:51