2022-11-07 分類: 網(wǎng)站建設(shè)
剛剛在9月編程語言排行榜上取得歷史性突破的PHP在Web開發(fā)領(lǐng)域到的對(duì)手可能就是基于微軟.NET技術(shù)的ASP.NET。近日,微軟的Joe Stagner在博客上發(fā)表了一系列文章比較了PHP和ASP.NET性能方面的文章,引起了來自雙方程序員的大量回應(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ù)。
ASP.NET比拼PHP的測(cè)試環(huán)境如下:
所有的測(cè)試都在同一臺(tái)機(jī)器上運(yùn)行(擁有4G內(nèi)存和60G 7200轉(zhuǎn)硬盤的Toshiba Tecra M5)。
Ubuntu 9和Windows Server 2008標(biāo)準(zhǔn)版分別安裝于獨(dú)立(但相同)的硬盤中。
Linux使用Apache2,Windows使用IIS 7作為各自的Web服務(wù)器。
雙方的操作系統(tǒng)都進(jìn)行了完整的patch或升級(jí)。
雙方的系統(tǒng)和運(yùn)行時(shí)都沒有進(jìn)行額外的性能增強(qiáng)。
從實(shí)驗(yàn)結(jié)果上看,PHP在Linux和Windows的執(zhí)行性能各有千秋:
純粹的語句執(zhí)行在Windows上表現(xiàn)更好。
函數(shù)調(diào)用在Windows上更快。
對(duì)象的創(chuàng)建和訪問,對(duì)于PHP 5.2來說在Linux上更快,但是對(duì)于PHP 5.3來說則是Windows更快。
類庫(kù)調(diào)用在Linux上快得多(如在Ubuntu上進(jìn)行加密要比Windows要快3到5倍)。
Linux與Windows平臺(tái)對(duì)比
在Linux上訪問文件性能略高于Windows,不過Windows上文件復(fù)制的性能要比Linux慢60%,可能是ACL高級(jí)安全的緣故。
在Linux上訪問MySQL要比Windows快不少,而且在Windows上運(yùn)行PHP 5.3的情況則更為惡劣(不過從下面PostgreSQL的情況上來看,這應(yīng)該是糟糕實(shí)現(xiàn)的緣故)。
PostgreSQL在兩個(gè)平臺(tái)上的性能非常接近(1000個(gè)操作的差距在0.06秒之內(nèi))——無論是PHP 5.3還是PHP 5.2,Windows上表現(xiàn)都略勝一籌。
Windows上PHP 5.2訪問MS SQL Server的性能稍遜于在Linux上訪問MySQL(此時(shí)還沒有面向PHP 5.3的SQL Server支持)。
對(duì)于純粹的PHP執(zhí)行性能來說,Linux和Windows相差無幾,這不會(huì)成為選擇Linux或Windows作為部署平臺(tái)的決定性因素。如果你在構(gòu)建一個(gè)應(yīng)用程序,那么PostgreSQL可能是更好的選擇。因?yàn)樗趦蓚€(gè)平臺(tái)上的表現(xiàn)都很優(yōu)秀。
如果你的應(yīng)用程序必須使用MySQL,那么選擇Windows就需要早些計(jì)劃擴(kuò)展性問題了(個(gè)人認(rèn)為Sun不太可能為Windows優(yōu)化MySQL的性能)。
PHP的個(gè)版本的SQL Server驅(qū)動(dòng)程序要比MySQL或PostpreSQL要慢一些,但這應(yīng)該不會(huì)成為問題。第二個(gè)版本的驅(qū)動(dòng)器正在開發(fā)之中,它會(huì)帶來性能提升。
在Joe看來,全面來看,PHP和IIS團(tuán)隊(duì)在執(zhí)行性能上已經(jīng)做的非常成功,接下來就需要各開源程序的團(tuán)隊(duì)(Drupal、WordPress、Joomla等等)為各平臺(tái)進(jìn)行性能優(yōu)化了。
不過,除了文件復(fù)制操作之外,ASP.NET在性能方面全面于PHP(無論部署在Linux還是Windows上面):
Linux上訪問MySQL的性能稍稍優(yōu)于Windows上訪問SQL Server的性能(使用普通的數(shù)據(jù)類型和SELECT語句)。但是這里的差距幾乎可以忽略不計(jì)。
ASP.NET(C#)操作,如對(duì)象使用,類庫(kù)調(diào)用等等,其性能都遠(yuǎn)高于PHP。對(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令人興奮的地方不是它的語言/平臺(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)對(duì)比
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è)半性質(zhì)的環(huán)境”——這種說法狗屁不通。PHP平臺(tái)上有許多的,高質(zhì)量的應(yīng)用程序,也有很多我非常尊敬的開發(fā)人員。是否是開發(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àn)閹缀跛写蟮恼军c(diǎn)都是用PHP構(gòu)建的”——這種說法是沒道理,不過說那些站點(diǎn)“幾乎都是”用PHP構(gòu)建的也是錯(cuò)誤的。有些是,有些不是。
如果你們看到這一數(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è)改變:
為L(zhǎng)inux和Windows上安裝了op-code緩存,并重新運(yùn)行了大部分測(cè)試。
由于一些依賴項(xiàng)的問題,PHP 5.3 + APC的測(cè)試平臺(tái)變成了Debain 5操作系統(tǒng)。
對(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)檫@反映了語言或平臺(tái)的基礎(chǔ)消耗。這是處頁(yè)面?zhèn)鬏數(shù)刃阅荛_銷外的性能消耗,是一個(gè)重要的考慮方面。
我的一些PHP朋友也認(rèn)可這個(gè)測(cè)試的準(zhǔn)確性,不過給出了非常有見解的補(bǔ)充:
ASP.NET在性能上的不會(huì)對(duì)我有什么影響。PHP是我的愛,我的應(yīng)用程序已經(jīng)足夠快了。沒錯(cuò),ASP.NET在基礎(chǔ)性能上是比較快,但是我的應(yīng)用程序可以通過優(yōu)秀的頁(yè)面實(shí)現(xiàn)和JavaScript實(shí)踐把這部分性能補(bǔ)回來。
此外,根據(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)目:
實(shí)際頁(yè)面測(cè)試:循環(huán),函數(shù)調(diào)用和對(duì)象操作是一類測(cè)試,不過頁(yè)面的整體呈現(xiàn)則是另一種有意義的測(cè)試。
負(fù)載測(cè)試:哪一個(gè)環(huán)境可以同時(shí)處理更大量的請(qǐng)求。
在負(fù)載測(cè)試中,哪一方的性能會(huì)下降地更快。
在各種情況下,64位平臺(tái)的表現(xiàn)如何。
國(guó)內(nèi)也曾經(jīng)進(jìn)行過PHP在Linux和Windows平臺(tái)上的性能測(cè)試。微軟在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的托管方式。
asp.net和php哪個(gè)更好
asp.net是微軟的東西,他的發(fā)展前途取決于微軟的態(tài)度。
在.net之前,微軟的是ASP。在微軟的大力推廣下,其看起來還是很有前途的。但現(xiàn)在,微軟想推廣asp.net,而ASP成了其障礙。所以從Windows Server 2003開始,微軟對(duì)ASP做了許多限制,比如上傳文件不能超過200KB等。再看看現(xiàn)在,微軟為了推廣Windows Vista以及新的Windows 7,對(duì)Windows XP做了些什么,直接對(duì)普通用戶停止了技術(shù)支持,就是為了迫使你更換。
如果以后,微軟有了比.net更好的東西。微軟估計(jì)會(huì)對(duì).net做類似的限制,強(qiáng)制用戶升級(jí)。
PHP是完全開源的,其需求更貼近日常的應(yīng)用,代碼風(fēng)格類似于C語言,比較容易學(xué)習(xí)。
速度方面,雖然PHP不是經(jīng)過編譯的,但在Linux下的實(shí)際應(yīng)用的執(zhí)行效率肯定要比Windows下的.net快。
運(yùn)行時(shí)的安全性PHP肯定要比微軟的.net要高。不過通常代碼都是沒有保護(hù)的。通常需要用商業(yè)的Zend軟件來加密。當(dāng)然這個(gè)加密的過程也是種編譯的過程。保護(hù)了代碼的同時(shí),還提高了執(zhí)行速度。新的Zend的加密算法,目前還沒有成功破解的。而.net如果只做單純的編譯,是很容易被反編譯回來的。
PHP目前有兩個(gè)支線,一個(gè)PHP4、一個(gè)是PHP5。兩個(gè)支線都在共同的維護(hù)中。這保證過去使用PHP4的系統(tǒng)仍然能保證持續(xù)的良好的安全性和功能的更新。
ASP.NET與PHP哪個(gè)更有發(fā)展前途一點(diǎn)?
簡(jiǎn) 介
ASP全名Active Server Pages,是一個(gè)WEB服務(wù)器端的開發(fā)環(huán)境,利用它可以產(chǎn)生和運(yùn)行動(dòng)態(tài)的、交互的、高性能的WEB服務(wù)應(yīng)用程序。ASP采用腳本語言VBScript(Java script)作為自己的開發(fā)語言。
PHP是一種跨平臺(tái)的服務(wù)器端的嵌入式腳本語言。它大量地借用C,Java和Perl語言的語法, 并耦合PHP自己的特性,使WEB開發(fā)者能夠快速地寫出動(dòng)態(tài)生成頁(yè)面。它支持目前絕大多數(shù)數(shù)據(jù)庫(kù)。還有一點(diǎn),PHP是完全免費(fèi)的,不用花錢,你可以從PHP官方站點(diǎn)(http: //www.php.net)自由下載。而且你可以不受限制地獲得源碼,甚至可以從中加進(jìn)你自己需要的特色。
JSP是Sun公司推出的新一代站點(diǎn)開發(fā)語言,他完全解決了目前ASP,PHP的一個(gè)通病——腳本級(jí)執(zhí)行(據(jù)說PHP4也已經(jīng)在Zend的支持下,實(shí)現(xiàn)編譯運(yùn)行)。Sun公司借助自己在Java上的不凡造詣,將Java從Java應(yīng)用程序和Java Applet之外,又有新的碩果,就是JSP——Java Server Page。Jsp可以在Serverlet和JavaBean的支持下,完成功能強(qiáng)大的站點(diǎn)程序。
三者都提供在 HTML代碼中混合某種程序代碼、由語言引擎解釋執(zhí)行程序代碼的能力。但JSP代碼被編譯成 Servlet并由Java虛擬機(jī)解釋執(zhí)行,這種編譯操作僅在對(duì)JSP頁(yè)面的次請(qǐng)求時(shí)發(fā)生。在ASP 、PHP、JSP環(huán)境下,HTML代碼主要負(fù)責(zé)描述信息的顯示樣式,而程序代碼則用來描述處理邏輯。普通的 HTML頁(yè)面只依賴于Web服務(wù)器,而ASP 、PHP、JSP頁(yè)面需要附加的語言引擎分析和執(zhí)行程序代碼。程序代碼的執(zhí)行結(jié)果被重新嵌入到HTML代碼中,然后一起發(fā)送給瀏覽器。ASP 、PHP、JSP三者都是面向Web服務(wù)器的技術(shù),客戶端瀏覽器不需要任何附加的軟件支持。
技術(shù)特點(diǎn)
ASP:
使用VBScript 、 JScript等簡(jiǎn)單易懂的腳本語言,結(jié)合HTML代碼,即可快速地完成網(wǎng)站的應(yīng)用程序。
無須compile編譯,容易編寫,可在服務(wù)器端直接執(zhí)行。
使用普通的文本編輯器,如Windows的記事本,即可進(jìn)行編輯設(shè)計(jì)。
與瀏覽器無關(guān)(Browser Independence), 用戶端只要使用可執(zhí)行HTML碼的瀏覽器,即可瀏覽Active Server Pages所設(shè)計(jì)的網(wǎng)頁(yè)內(nèi)容。Active ServerPages 所使用的腳本語言(VBScript 、 Jscript)均在WEB服務(wù)器端執(zhí)行,用戶端的瀏覽器不需要能夠執(zhí)行這些腳本語言。
Active Server Pages能與任何ActiveX scripting語言相容。除了可使用VB Script或JScript語言來設(shè)計(jì)外,還通過plug-in的方式,使用由第三方所提供的其他腳本語言,譬如REXX 、Perl 、Tcl等。腳本引擎是處理腳本程序的COM(Component Object Model) 物件。
可使用服務(wù)器端的腳本來產(chǎn)生客戶端的腳本。
ActiveX Server Components(ActiveX 服務(wù)器元件 )具有無限可擴(kuò)充性。
可以使用Visual Basic 、Java 、Visual C++ 、COBOL等編程語言來編寫你所需要的ActiveX Server Component 。
PHP:
數(shù)據(jù)庫(kù)連接
PHP可以編譯成具有與許多數(shù)據(jù)庫(kù)相連接的函數(shù)。PHP與MySQL是現(xiàn)在好的組合。你還可以自己編寫外圍的函數(shù)去間接存取數(shù)據(jù)庫(kù)。通過這樣的途徑當(dāng)你更換使用的數(shù)據(jù)庫(kù)時(shí),可以輕松地更改編碼以適應(yīng)這樣的變化。PHPLIB就是常用的可以提供一般事務(wù)需要的一系列基庫(kù)。但PHP提供的數(shù)據(jù)庫(kù)接口支持彼此不統(tǒng)一,比如對(duì)Oracle, MySQL,Sybase的接口,彼此都不一樣。這也是PHP的一個(gè)弱點(diǎn)。
面向?qū)ο缶幊?/p>
PHP提供了類和對(duì)象?;趙eb的編程工作非常需要面向?qū)ο缶幊棠芰ΑHP支持構(gòu)造器、提取類等。
JSP:
將內(nèi)容的生成和顯示進(jìn)行分離
使用JSP技術(shù),Web頁(yè)面開發(fā)人員可以使用HTML或者XML標(biāo)識(shí)來設(shè)計(jì)和格式化終頁(yè)面。使用JSP標(biāo)識(shí)或者小腳本來生成頁(yè)面上的動(dòng)態(tài)內(nèi)容。生成內(nèi)容的邏輯被封裝在標(biāo)識(shí)和JavaBeans組件中,并且捆綁在小腳本中,所有的腳本在服務(wù)器端運(yùn)行。如果核心邏輯被封裝在標(biāo)識(shí)和Beans中,那么其他人,如Web管理人員和頁(yè)面設(shè)計(jì)者,能夠編輯和使用JSP頁(yè)面,而不影響內(nèi)容的生成。
在服務(wù)器端,JSP引擎解釋JSP標(biāo)識(shí)和小腳本,生成所請(qǐng)求的內(nèi)容(例如,通過訪問JavaBeans組件,使用JDBCTM技術(shù)訪問數(shù)據(jù)庫(kù),或者包含文件),并且將結(jié)果以HTML(或者XML)頁(yè)面的形式發(fā)送回瀏覽器。這有助于作者保護(hù)自己的代碼,而又保證任何基于HTML的Web瀏覽器的完全可用性。
強(qiáng)調(diào)可重用的組件
絕大多數(shù)JSP頁(yè)面依賴于可重用的,跨平臺(tái)的組件(JavaBeans或者Enterprise JavaBeans組件)來執(zhí)行應(yīng)用程序所要求的更為復(fù)雜的處理。開發(fā)人員能夠共享和交換執(zhí)行普通操作的組件,或者使得這些組件為更多的使用者或者客戶團(tuán)體所使用?;诮M件的方法加速了總體開發(fā)過程,并且使得各種組織在他們現(xiàn)有的技能和優(yōu)化結(jié)果的開發(fā)努力中得到平衡。
采用標(biāo)識(shí)簡(jiǎn)化頁(yè)面開發(fā)
Web頁(yè)面開發(fā)人員不會(huì)都是熟悉腳本語言的編程人員。JavaServer Page技術(shù)封裝了許多功能,這些功能是在易用的、與JSP相關(guān)的XML標(biāo)識(shí)中進(jìn)行動(dòng)態(tài)內(nèi)容生成所需要的。標(biāo)準(zhǔn)的JSP標(biāo)識(shí)能夠訪問和實(shí)例化JavaBeans組件,設(shè)置或者檢索組件屬性,下載Applet,以及執(zhí)行用其他方法更難于編碼和耗時(shí)的功能。
通過開發(fā)定制化標(biāo)識(shí)庫(kù),JSP技術(shù)是可以擴(kuò)展的。今后,第三方開發(fā)人員和其他人員可以為常用功能創(chuàng)建自己的標(biāo)識(shí)庫(kù)。這使得Web頁(yè)面開發(fā)人員能夠使用熟悉的工具和如同標(biāo)識(shí)一樣的執(zhí)行特定功能的構(gòu)件來工作。
JSP技術(shù)很容易整合到多種應(yīng)用體系結(jié)構(gòu)中,以利用現(xiàn)存的工具和技巧,并且擴(kuò)展到能夠支持企業(yè)級(jí)的分布式應(yīng)用。作為采用Java技術(shù)家族的一部分,以及Java 2(企業(yè)版體系結(jié)構(gòu))的一個(gè)組成部分,JSP技術(shù)能夠支持高度復(fù)雜的基于Web的應(yīng)用。
由于JSP頁(yè)面的內(nèi)置腳本語言是基于Java編程語言的,而且所有的JSP頁(yè)面都被編譯成為Java Servlet,JSP頁(yè)面就具有Java技術(shù)的所有好處,包括健壯的存儲(chǔ)管理和安全性。
作為Java平臺(tái)的一部分,JSP擁有Java編程語言“一次編寫,各處運(yùn)行”的特點(diǎn)。隨著越來越多的供應(yīng)商將JSP支持添加到他們的產(chǎn)品中,您可以使用自己所選擇的服務(wù)器和工具,更改工具或服務(wù)器并不影響當(dāng)前的應(yīng)用。
應(yīng)用范圍
ASP是Microsoft開發(fā)的動(dòng)態(tài)網(wǎng)頁(yè)語言,也繼承了微軟產(chǎn)品的一貫傳統(tǒng)——只能運(yùn)行于微軟的服務(wù)器產(chǎn)品,IIS(Internet Information Server) (windows NT)和PWS(Personal Web Server)(windows 98)上。Unix下也有ChiliSoft的插件來支持ASP,但是ASP本身的功能有限,必須通過ASP+COM的組合來擴(kuò)充,Unix下的COM實(shí)現(xiàn)起來非常困難。
PHP3可在Windows,Unix,Linux的Web服務(wù)器上正常運(yùn)行,還支持IIS,Apache等通用Web服務(wù)器,用戶更換平臺(tái)時(shí),無需變換PHP3代碼,可即拿即用。
JSP同PHP3類似,幾乎可以運(yùn)行于所有平臺(tái)。如Win NT,Linux,Unix. NT下IIS通過一個(gè)插件,例如JRUN或者ServletExec,就能支持JSP。著名的Web服務(wù)器Apache已經(jīng)能夠支持JSP。由于Apache廣泛應(yīng)用在NT、Unix和Linux上,因此JSP有更廣泛的運(yùn)行平臺(tái)。雖然現(xiàn)在NT操作系統(tǒng)占了很大的市場(chǎng)份額,但是在服務(wù)器方面Unix的優(yōu)勢(shì)仍然很大,而新崛起的Linux更是來勢(shì)不小。從一個(gè)平臺(tái)移植到另外一個(gè)平臺(tái),JSP和JavaBean甚至不用重新編譯,因?yàn)镴ava字節(jié)碼都是標(biāo)準(zhǔn)的與平臺(tái)無關(guān)的。
性能比較
有人做過試驗(yàn),對(duì)這三種語言分別做循環(huán)性能測(cè)試及存取Oracle數(shù)據(jù)庫(kù)測(cè)試。
在循環(huán)性能測(cè)試中,JSP只用了令人吃驚的四秒鐘就結(jié)束了20000*20000的循環(huán)。而ASP、PHP測(cè)試的是2000*2000循環(huán)(少一個(gè)數(shù)量級(jí)),卻分別用了63秒和84秒。(參考PHPLIB)。
數(shù)據(jù)庫(kù)測(cè)試中,三者分別對(duì) Oracle 8 進(jìn)行 1000 次 Insert,Update,Select和Delete: JSP 需要 13 秒,PHP 需要 69 秒,ASP則 需要 73 秒。 前景分析 目前在國(guó)內(nèi)PHP與ASP應(yīng)用為廣泛。而JSP由于是一種較新的技術(shù),國(guó)內(nèi)采用的較少。但在國(guó)外,JSP已經(jīng)是比較流行的一種技術(shù),尤其是電子商務(wù)類的網(wǎng)站,多采用JSP。
采用PHP的網(wǎng)站如新浪網(wǎng)(sina)、人(Chinaren)等,但由于PHP本身存在的一些缺點(diǎn),使得它不適合應(yīng)用于大型電子商務(wù)站點(diǎn),而更適合一些小型的商業(yè)站點(diǎn)。
先,PHP缺乏規(guī)模支持。其次,缺乏多層結(jié)構(gòu)支持。對(duì)于大負(fù)荷站點(diǎn),解決方法只有一個(gè):分布計(jì)算。數(shù)據(jù)庫(kù)、應(yīng)用邏輯層、表示邏輯層彼此分開,而且同層也可以根據(jù)流量分開,組成二維陣列。而PHP則缺乏這種支持。還有上面提到過的一點(diǎn),PHP提供的數(shù)據(jù)庫(kù)接口支持不統(tǒng)一,這就使得它不適合運(yùn)用在電子商務(wù)中。
ASP和JSP則沒有以上缺陷,ASP可以通過Microsoft Windowsd的COM/DCOM獲得ActiveX規(guī)模支持,通過DCOM和Transcation Server獲得結(jié)構(gòu)支持;JSP可以通過SUN Java的Java Class和EJB獲得規(guī)模支持,通過EJB/CORBA以及眾多廠商的Application Server獲得結(jié)構(gòu)支持。
三者中,JSP應(yīng)該是未來發(fā)展的趨勢(shì)。世界上一些大的電子商務(wù)解決方案提供商都采用JSP/Servlet。比較出名的如IBM的E-business,它的核心是采用JSP/Servlet的Web Sphere;西方另外一個(gè)非常著名的電子商務(wù)軟件提供商,Intershop,它原來的產(chǎn)品Intershop1,2, 3, 4占據(jù)了主要的電子商務(wù)軟件份額。
綜上所述,jsp應(yīng)該更有前途!
PHP與ASP.NET優(yōu)劣勢(shì)分析
不管你是不是已經(jīng)選擇了PHP,根據(jù)它在如下表格中在價(jià)格、速度、效率、安全性、平臺(tái)支持性和開源與否上的表現(xiàn),我們都能判斷出它的強(qiáng)項(xiàng)是遠(yuǎn)勝于弱點(diǎn)的。不足的是缺少面向?qū)ο蟮闹С?。然而,這是個(gè)相對(duì)次要的缺陷,雖然不可忽視語言的結(jié)構(gòu),可是終來說,優(yōu)秀的編碼還是歸結(jié)于反復(fù)實(shí)踐、執(zhí)行、好習(xí)慣和紀(jì)律。
價(jià)格:我不會(huì)單純考量次投資的價(jià)格,拿PHP來說,顯然是免費(fèi)的,但我們也要考慮開發(fā)、維護(hù)和調(diào)試的成本,你可能還要購(gòu)買Zend優(yōu)化引擎。對(duì)于ASP,你在一開始就要投資購(gòu)買產(chǎn)品,而且你還會(huì)在額外的技術(shù)上開銷,比如購(gòu)買圖形處理的類庫(kù),或是其它。但從長(zhǎng)遠(yuǎn)來看,PHP不會(huì)要求你去繳納升級(jí)費(fèi)用或是購(gòu)買更多的license。任何曾經(jīng)接觸過license的人都會(huì)知道公司往往會(huì)在確保產(chǎn)品的兼容性上花費(fèi)大量時(shí)間和金錢。此外,發(fā)現(xiàn)bug并得到修復(fù)的反饋處理情況也不盡相同,這其實(shí)也可換算為時(shí)間的消耗,進(jìn)而影響到整個(gè)開發(fā)的成本。
速度和效率:就像我前面所提到的,ASP.NET是一個(gè)允許你使用多種不同編程語言的框架。此外,它還號(hào)稱擁有出色的面向?qū)ο缶幊棠P汀4_實(shí)如此,可是這卻帶來了速度上的降低。談到它的這些優(yōu)點(diǎn),對(duì)于相同功能的頁(yè)面來說,比起PHP, 運(yùn)行于ASP的頁(yè)面需要其服務(wù)器分析、執(zhí)行更多的代碼。而PHP是“快餐型”的解決方案,先將功能搞定,還有很多健壯性上的問題可以留到2.0或是3.0里進(jìn)行補(bǔ)充,而且它的核心代碼得到編譯的優(yōu)化,程序可以高速運(yùn)行。速度并非的考量,內(nèi)存的耗用也很重要。
安全性:ASP.NET運(yùn)行于IIS之上,這是個(gè)曾無數(shù)次遭受攻擊的系統(tǒng),幾乎每周IT的新聞上都會(huì)有類似消息。實(shí)際上,它已成為一項(xiàng)負(fù)債,不管整個(gè)市場(chǎng)投了多少美元在上面,很多IT的人士已經(jīng)拒絕將他們的網(wǎng)絡(luò)暴露于IIS Web服務(wù)器之下。而PHP與Apache工作在一起,它擁有良好的速度、可靠性的表現(xiàn),還有過硬的安全性。
平臺(tái)支持性:ASP.NET起初運(yùn)行于IIS,現(xiàn)在也可以運(yùn)行于Apache,而Apache能運(yùn)行于所有平臺(tái)。PHP天生就是設(shè)計(jì)運(yùn)行于Apache上,所以你有很多被證明是可靠的平臺(tái)去選擇。
開源與否:開源并非只是那些理想主義程序員們的專利,也不是那些想要在license上節(jié)省幾十美元的公司所特有的。當(dāng)你碰到所購(gòu)買的軟件本身的bug的時(shí)候,開源可就是天賜良品。
無論是用ASP.NET還是PHP,都可能有很多用戶用你的軟件并發(fā)現(xiàn)bug。對(duì)于ASP.NET,這些bug就要經(jīng)過一個(gè)官僚的過程來告知,修復(fù),驗(yàn)證,然后再等到下一個(gè)補(bǔ)丁時(shí)發(fā)布。而PHP的修復(fù)和發(fā)布都很快。任何看過開源開發(fā)的人都知道新的產(chǎn)品發(fā)布或是補(bǔ)丁經(jīng)常是幾天內(nèi)的事情而不是商業(yè)軟件那樣的幾周或幾個(gè)月。如果你認(rèn)為那還不夠快的話,如果你愿意,你也可以自己直接修復(fù)。
技術(shù)分析:.NET的優(yōu)勢(shì)與劣勢(shì)
.NET Framework自2002年3月在日本國(guó)內(nèi)上市以來,至今已一年有余。據(jù)估計(jì)標(biāo)準(zhǔn)集成.NET Framework的OS--Windows Server 2003將于2003年5月在日本上市。隨著.NET環(huán)境的完善,作為足以抗衡Java的系統(tǒng)構(gòu)筑基礎(chǔ),開發(fā)人員需要認(rèn)識(shí).NET Framework。下面筆者就來分析一下.NET的優(yōu)勢(shì)與劣勢(shì)。
XML Web服務(wù)并未成為普及.NET的導(dǎo)火索
此前人們一直在想:“對(duì).NET來說,是否存在不同于Java的、獨(dú)特的應(yīng)用領(lǐng)域和市場(chǎng)?”。
業(yè)內(nèi)普遍認(rèn)為,微軟新一代系統(tǒng)構(gòu)筑環(huán)境--.NET Framework是在研究Java的基礎(chǔ)上開發(fā)出來的。不僅功能和架構(gòu)相似,而且由于是在Java之后開發(fā)出來的,因此Java所沒有的功能更是隨處可見。比如在Web應(yīng)用中實(shí)現(xiàn)事件驅(qū)動(dòng)型應(yīng)用程序功能等。
不過雖說如此,如果只是告訴用戶“.NET Framework比Java好得多”,那么Java開發(fā)人員特意轉(zhuǎn)而使用.NET Framework的動(dòng)機(jī)不會(huì)太強(qiáng)。
由于Java已經(jīng)先行積累了廣泛的應(yīng)用成果,積累了很多足以彌補(bǔ)其缺點(diǎn)的經(jīng)驗(yàn)以及平臺(tái)工具。只要不出現(xiàn)Java難以應(yīng)用的用途和市場(chǎng),那么.NET Framework就很難阻止Java的進(jìn)一步發(fā)展。
.NET的優(yōu)勢(shì):企業(yè)信息系統(tǒng)部門可自行編程
剛開始,微軟就把易于開發(fā)XML Web服務(wù)作為.NET的優(yōu)勢(shì)而大加宣傳。以XML Web服務(wù)為前提而設(shè)計(jì)的.NET與Web服務(wù)具有極高的親和性。但XML Web服務(wù)的產(chǎn)生卻比較晚。盡管業(yè)內(nèi)對(duì)它的期待和關(guān)注程度較高,但由于可充分利用XML Web服務(wù)的“可賺錢的”業(yè)務(wù)模式尚未確立,所以目前與Web站點(diǎn)相比其市場(chǎng)仍微不足道。其中,Java方面也正在加緊完善便于開發(fā)XML Web服務(wù)的功能。
那么,是否存在.NET的獨(dú)特用途呢?筆者通過采訪所得到的一個(gè)答案是:.NET開發(fā)工具--Visual Studo.NET的易用性使得它在Java很難實(shí)現(xiàn)的“用戶企業(yè)(信息系統(tǒng)部門)也可編程的系統(tǒng)”上超人一頭。筆者認(rèn)為可能還存在其他這樣的領(lǐng)域。當(dāng)然,盡管.NET的標(biāo)準(zhǔn)語言VB.NET和C#都與Java一樣復(fù)雜,但是Visual Studo.NET卻很好地消除了這種復(fù)雜性。
比如,日本蘭碧兒(NOEVIR)只靠自己的信息系統(tǒng)部門就完成了Web代理店支援系統(tǒng)的從企劃到編程的全部工作。日本一家系統(tǒng)集成商曾表示,此前導(dǎo)入Java系統(tǒng)的用戶企業(yè)中“選用.NET的信息系統(tǒng)部門就有望自行開發(fā)或?qū)ο到y(tǒng)進(jìn)行修改”。
筆者認(rèn)為,由于Java本身較為復(fù)雜,且不易學(xué)習(xí)掌握,因此“用戶企業(yè)只負(fù)責(zé)企劃,而將編程工作完全委托給集成商的現(xiàn)象非常普遍”。
在COBOL和VB(客戶商/服務(wù)器)的全盛時(shí)期,信息系統(tǒng)部門自己編程、對(duì)系統(tǒng)進(jìn)行部分修改和功能追加是很正常的事情。如果連細(xì)小的系統(tǒng)修改都要外包,那么系統(tǒng)的維護(hù)成本自然會(huì)很高,因此就將失去靈活性。甚至于還有可能削弱信息系統(tǒng)部門的業(yè)務(wù)能力。說到企劃,聽起來好聽,但如果連大體的情況也不了解,恐怕與開發(fā)商交涉都很困難。這也許就是Java的一個(gè)“弊端”吧。
此外,“成本比Unix低”以及“可以充分利用Windows技術(shù)資源”等原因也在加速.NET Framework的普及。作為客戶端/服務(wù)器系統(tǒng)的開發(fā)環(huán)境,VB的后續(xù)語言--.NET中的“Windows Form”具競(jìng)爭(zhēng)力。越來越多的系統(tǒng)集成商開始選擇這一工具構(gòu)筑系統(tǒng)。
.NET的劣勢(shì):應(yīng)用成果少、開放性差
反過來說,.NET的劣勢(shì)則在于在大型系統(tǒng)中的應(yīng)用成果少、缺乏“開放性”。
對(duì)于應(yīng)用成果來說,今后其數(shù)量將會(huì)不斷增加。據(jù)悉,日本Kabu.com證券將在2003年度內(nèi)利用.NET Framework全面重新構(gòu)筑該公司目前利用ASP構(gòu)筑的系統(tǒng)。
在“開放性”方面又將會(huì)如何呢?Java普及的主要因素很多,但筆者認(rèn)為其中關(guān)鍵的在于“開放性”。由于可各種OS上運(yùn)行,而且很多開發(fā)商還提供了Web應(yīng)用服務(wù)器和開發(fā)工具,因此用戶可以隨意選擇。而開發(fā)商則通過在功能和性能方面相互競(jìng)爭(zhēng)來不斷提高產(chǎn)品水平。
而.NET Framework怎么樣呢?只要想應(yīng)用于業(yè)務(wù)系統(tǒng)中,其OS實(shí)際上則只能限于Windows。盡管微軟已經(jīng)提供了FreeBSD版.NET Framework,但其目的僅限于學(xué)術(shù)研究。
今后人們所能期待的是Mono Project。Mono Project是指完全獨(dú)立于微軟、正在開發(fā)開放源碼版.NET Framework的計(jì)劃。主導(dǎo)該計(jì)劃的是一家名為Ximian的Linux企業(yè),這家公司成功地開發(fā)了Linux標(biāo)準(zhǔn)桌面環(huán)境GNOME,目前已受到業(yè)界的廣泛關(guān)注。
2003年1月該計(jì)劃還發(fā)布了運(yùn)行Web應(yīng)用程序ASP.NET的Web服務(wù)軟件XSP。盡管很多功能仍在開發(fā)之中,但目前開發(fā)工作進(jìn)展順利。目前正面向Linux和Windows進(jìn)行開發(fā)。據(jù)Mono Project稱,由于該軟件依賴于Linux的部分不多,因此能夠輕松地向其他UNIX OS移植。
能否形成像Mono一樣的開放環(huán)境將是.NET普及的關(guān)鍵所在。微軟目前已經(jīng)向業(yè)界標(biāo)準(zhǔn)化機(jī)構(gòu)ECMA(歐洲計(jì)算機(jī)制造商協(xié)會(huì))提交了.NET標(biāo)準(zhǔn),此舉表明微軟將采用開放標(biāo)準(zhǔn)。但目前尚不清楚此舉只是單純的一種姿態(tài),還是真的要開放.NET。這就要看微軟今后是否能夠繼續(xù)公開足夠的相關(guān)標(biāo)準(zhǔn)和信息了。
ASP.NET和PHP性能對(duì)比
經(jīng)過一些篩選,只選擇一些代表性的看法進(jìn)行翻譯, 對(duì)于英文不是太好的朋友比較有用, 如果有翻譯和知識(shí)點(diǎn)上的錯(cuò)誤,請(qǐng)指出。
先, 排除偏激和未經(jīng)測(cè)試的看法, 讓我們來看看interscape和ttuttle怎么說
interscape(MVP) :
PHP是一個(gè)腳本語言, 而ASP.NET是一個(gè)面向?qū)ο螅?編譯性的語言。你不能讓PHP在一個(gè)WINDOWS程序中運(yùn)行, 但是你可以拷貝ASP.NET的代碼并把它放到WINFORM程序里面, 而不用太大的修改。 但是如果你要談及所有情況下的性能, 也許PHP會(huì)好一些, 不過我會(huì)為WEB開發(fā)選擇OOP(面向?qū)ο缶幊蹋┒皇莝tep-thru(順序編程)腳本編程方式。
ttuttle:
我不想去做任何專橫武斷(outrageous)的聲明, 但是讓我們來看一下一些事實(shí):
PHP已經(jīng)被證明比ASP3.0稍微快一些
ASP.NET比ASP3.0快3~5倍(一種類似于PHP的解析性腳本語言)(注:ttuttle這句出自于http://www.asp.net/whitepaper/whyaspnet.aspx)
ASP.NET可以存放在緩存(Output Caching)中, 當(dāng)頁(yè)面次被訪問和編譯后, 它可以從緩存中得到。 沒有任何頁(yè)面處理器會(huì)比緩存更快。
在默認(rèn)安裝下,ASP.NET是編譯性語言, 而PHP和ASP3.0則是解釋性語言。
面對(duì)這兩種孑然不同的解釋, 我再來看看ScottGu和 wysiwyg 還有 Xanderno怎么說
ASP.NET是編譯性質(zhì)而不是解釋性質(zhì)的。 所以語句可以被轉(zhuǎn)換為更快的執(zhí)行時(shí)間。
而PHP方面也有ZEND在出售其收費(fèi)的編譯器ADD-ON.
然而, 我們已經(jīng)看到Nile benchmark(注:一種測(cè)試的性能基準(zhǔn),可以參看其白皮書http://www.gotdotnet.com/team/compare/Nile %20Benchmark%20Results.doc)中, ASP.NET和SQL這種組合的速度比PHP和MYSQL快 2~3倍, 且近乎5倍快于PHP和ORACLE的運(yùn)行效率(即便ZEND編譯器和緩存器已經(jīng)安裝)
wysiwyg:
雖然這個(gè)主題是ASP.NET VS PHP, 但是我來說一下我測(cè)試的事實(shí)卻是 ASP要稍快于
ASP.NET在ASP中, 這段代碼用了2秒
...................
.....store order info in myRS.....
.....store customer info in myTable.....
....................
Do while not myRS.eof
myTable.open "select customername from tblCustomer where customerID=" &
myRS.fields("CustomerID", myConnection
myArray(0,ubound(myArray,2))=myRS.fields("Ordernumber"
myArray(1,Ubound(myArray,2))=myRS.fields("OrderDate"
myArray(2,Ubound(myArray,2))=myTable.fields("CustomerName"
myTable.close
myRS.movenext
loop
而ASP.NET用了40秒
trace.warn("open conn: " & now)
...................
.....store order info in datatable myDataTable.....
.....store customer info in datatable myCustomer.....
....................
myDataView=new DataView(myCustomer)
for each myRow in myDataTable.rows
myDataview.rowFilter="CustomerID=" & myRow("CustomerID"
myRow("CustomerName"=myDataview(0).row("Customername"
next
trace.warn("finish looping: " & now)
我很希望自己的結(jié)果是ASP.NET快于ASP, 但是確相反, 誰能告訴我為什么??
(注: wysiwyg認(rèn)為他自己做是測(cè)試,但是沒有說明計(jì)算機(jī)和操作系統(tǒng)和測(cè)試環(huán)境的詳細(xì)情況,也沒說明是否屬于哪一級(jí)別的壓力測(cè)試)
Xanderno:
在我的不完善的測(cè)試中, 采用ACT 作為一種方法。 在一臺(tái)配置低機(jī)器上面, 用ASP通過
一個(gè)SQL SERVER上的數(shù)據(jù)庫(kù)獲取數(shù)據(jù), 每秒種我可以獲得10~15頁(yè)數(shù)據(jù) 。 同樣的函數(shù), 用ASP.NET, 每秒種我卻可以獲得30~40頁(yè)數(shù)據(jù), 使用輸出緩存(output caching)后,
它上升為120頁(yè)/秒。
============================
此外,還有人問了這樣一個(gè)問題"VB.NET和C#哪個(gè)更快?"
Daniel P. 這樣回答: 他們并沒有區(qū)別, VB.NET和C#都是轉(zhuǎn)換成 IL-Code(中間語言代碼)---用來編譯主程序的。
(注: 這種說法不一定正確, 兩者的編譯器是不一樣的, 而且這個(gè)結(jié)論也沒有經(jīng)過嚴(yán)格的壓力測(cè)試)
后, 也許大家總是覺得程序員之間這種討論看起來很funny, 很多人總是帶有主觀性進(jìn)行討論, 連一些編程大師級(jí)的老外也像小孩子一樣在爭(zhēng)論。 但是沒有自己所愛的語言, 沒有這種狂熱又怎會(huì)有技術(shù)的進(jìn)步。
本文題目:php與.NET的優(yōu)缺點(diǎn)各是什么,PHP和.NET哪個(gè)更好?
路徑分享:http://jinyejixie.com/news/211316.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)、搜索引擎優(yōu)化、Google、全網(wǎng)營(yíng)銷推廣、ChatGPT、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容