誰是速度之王?php
剛剛在9月編程語言排行榜上取得歷史性突破的PHP在Web開發領域最到的對手可能就是基於微軟.NET技術的ASP.NET。近日,微軟的 Joe Stagner在博客上發表了一系列文章比較了PHP和ASP.NET性能方面的文章,引發了來自雙方程序員的大量回應。Joe表示,他會將這樣的測試持 續下去,並尋求更爲合適的方式,以得到對實際項目來講儘量有參考價值的結論。html
Joe在博客中稱,通常來講,做性能測試的目的是要嘗試證實一方比令一方要快。我受僱於微軟,同時編寫PHP和ASP.NET代碼。我在.NET出現以前就在使用PHP,兩個東西我都很喜歡。程序員
因此,我很難說出哪一個更好。當我說PHP好話時,個人微軟同事們會寫信來批評我,而當我發表傾向於ASP.NET的言論時,個人PHP朋友們會說我是微軟的託。web
我進行這個測試是由於每一個人都對PHP的性能有本身的見解(Windows vs. Linux & 5.2 vs. 5.3),卻沒人能給出明確的數據。算法
ASP.NET比拼PHP的測試環境以下:數據庫
全部的測試都在同一臺機器上運行(擁有4G內存和60G 7200轉硬盤的Toshiba Tecra M5)。編程
Ubuntu 9和Windows Server 2008標準版分別安裝於獨立(但相同)的硬盤中。windows
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平臺對比
在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支持)。
對於純粹的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位系統對比
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構建的也是錯誤的。有些是,有些不是。
若是大家看到這一數據以後對ASP.NET信心倍增我天然很高興。若是我不認爲.NET是開發Web應用程序來講是一種更好的選擇——至少不屬於其它平臺,那麼我也不會在微軟工做了。
可是……若是你由於這些數據而忽視PHP,也是錯誤且幼稚的行爲。
從純技術角度來講,我認爲.NET遠比PHP強大,但這並不意味着PHP不夠強大。在我看來,PHP的力量體如今衆多的應用程序以及可用的框架。
大約一週之後,Joe公開了第二次測試的結果。與前一個測試相比,第二個測試主要有如下兩個改變:
爲Linux和Windows上安裝了op-code緩存,並從新運行了大部分測試。
因爲一些依賴項的問題,PHP 5.3 + APC的測試平臺變成了Debain 5操做系統。
對於第二次測試及其結果,Joe解釋到:
從結果上看,Ubuntu和Debian上運行PHP的性能差距能夠忽略不計。部分條目的性能有些細小的改進,有些則有25%的提升,可是整體來講其效果比我想象中要來得低。
使用APC以後,一些條目的運行反而變慢了,不過我認爲這只是機器所形成的偏差。請注意,表格中顯示的不是第一次的結果,都是通過兩次刷新,確認是在緩存命中時獲得的結果。
我認爲如今的測試很是公平。
空的循環測試和空的函數執行很是重要,由於這反映了語言或平臺的基礎消耗。這是處頁面傳輸等性能開銷外的性能消耗,是一個重要的考慮方面。
個人一些PHP朋友也承認這個測試的準確性,不過給出了很是有看法的補充:
ASP.NET在性能上的領先不會對我有什麼影響。PHP是個人最愛,個人應用程序已經足夠快了。沒錯,ASP.NET在基礎性能上是比較快,可是個人應用程序能夠經過優秀的頁面實現和JavaScript實踐把這部分性能補回來。
此外,根據上一次實驗的結果,在Windows平臺上運行PHP時,在MySQL和文件的訪問上有一些性能問題,微軟許多團隊都向我獲取了相關信息。但願這些數據都夠轉變爲切實的改進。
Joe表示,他將收集你們認爲更公平,更有意義的測試場景。如下是他所計劃的測試項目:
實際頁面測試:循環,函數調用和對象操做是一類測試,不過頁面的總體呈現則是另外一種有意義的測試。
負載測試:哪個環境能夠同時處理更大量的請求。
在負載測試中,哪一方的性能會降低地更快。
在各類狀況下,64位平臺的表現如何。
國內也曾經進行過PHP在Linux和Windows平臺上的性能測試。微軟在WordCamp China 2009大會上公開了以前與康盛創想合做進行的性能評估結果:在Windows Server 2008 + IIS上運行PHP,從平均相應時間,每秒處理的請求數,以及數據吞吐量等多方便均優於Linux + Apache的託管方式。
asp.net和php哪一個更好
asp.net是微軟的東西,他的發展前途取決於微軟的態度。
在.net以前,微軟的是ASP。在微軟的大力推廣下,其看起來仍是頗有前途的。但如今,微軟想推廣asp.net,而ASP成了其障礙。因此 從Windows Server 2003開始,微軟對ASP作了許多限制,好比上傳文件不能超過200KB等。再看看如今,微軟爲了推廣Windows Vista以及最新的Windows 7,對Windows XP作了些什麼,直接對普通用戶中止了技術支持,就是爲了迫使你更換。
若是之後,微軟有了比.net更好的東西。微軟估計會對.net作相似的限制,強制用戶升級。
PHP是徹底開源的,其需求更貼近平常的應用,代碼風格相似於C語言,比較容易學習。
速度方面,雖然PHP不是通過編譯的,但在Linux下的實際應用的執行效率確定要比Windows下的.net快。
運行時的安全性PHP確定要比微軟的.net要高。不過一般代碼都是沒有保護的。一般須要用商業的Zend軟件來加密。固然這個加密的過程也是 種編譯的過程。保護了代碼的同時,還提升了執行速度。新的Zend的加密算法,目前尚未成功破解的。而.net若是隻作單純的編譯,是很容易被反編譯回 來的。
PHP目前有兩個支線,一個PHP四、一個是PHP5。兩個支線都在共同的維護中。這保證過去使用PHP4的系統仍然能保證持續的良好的安全性和功能的更新。
ASP.NET與PHP哪一個更有發展前途一點?
簡 介
ASP全名Active Server Pages,是一個WEB服務器端的開發環境,利用它能夠產生和運行動態的、交互的、高性能的WEB服務應用程序。ASP採用腳本語言VBScript(Java script)做爲本身的開發語言。
PHP是一種跨平臺的服務器端的嵌入式腳本語言。它大量地借用C,Java和Perl語言的語法, 並耦合PHP本身的特性,使WEB開發者可以快速地寫出動態生成頁面。它支持目前絕大多數數據庫。還有一點,PHP是徹底免費的,不用花錢,你能夠從 PHP官方站點(http: //www.php.net)自由下載。並且你能夠不受限制地得到源碼,甚至能夠從中加進你本身須要的特點。
JSP是Sun公司推出的新一代站點開發語言,他徹底解決了目前ASP,PHP的一個通病——腳本級執行(聽說PHP4也已經在Zend的支持 下,實現編譯運行)。Sun公司藉助本身在Java上的不凡造詣,將Java從Java應用程序和Java Applet以外,又有新的碩果,就是JSP——Java Server Page。Jsp能夠在Serverlet和JavaBean的支持下,完成功能強大的站點程序。
三者都提供在 HTML代碼中混合某種程序代碼、由語言引擎解釋執行程序代碼的能力。但JSP代碼被編譯成 Servlet並由Java虛擬機解釋執行,這種編譯操做僅在對JSP頁面的第一次請求時發生。在ASP 、PHP、JSP環境下,HTML代碼主要負責描述信息的顯示樣式,而程序代碼則用來描述處理邏輯。普通的 HTML頁面只依賴於Web服務器,而ASP 、PHP、JSP頁面須要附加的語言引擎分析和執行程序代碼。程序代碼的執行結果被從新嵌入到HTML代碼中,而後一塊兒發送給瀏覽器。ASP 、PHP、JSP三者都是面向Web服務器的技術,客戶端瀏覽器不須要任何附加的軟件支持。
技術特色
ASP:
使用VBScript 、 JScript等簡單易懂的腳本語言,結合HTML代碼,便可快速地完成網站的應用程序。
無須compile編譯,容易編寫,可在服務器端直接執行。
使用普通的文本編輯器,如Windows的記事本,便可進行編輯設計。
與瀏覽器無關(Browser Independence), 用戶端只要使用可執行HTML碼的瀏覽器,便可瀏覽Active Server Pages所設計的網頁內容。Active ServerPages 所使用的腳本語言(VBScript 、 Jscript)均在WEB服務器端執行,用戶端的瀏覽器不須要可以執行這些腳本語言。
Active Server Pages能與任何ActiveX scripting語言相容。除了可以使用VB Script或JScript語言來設計外,還經過plug-in的方式,使用由第三方所提供的其餘腳本語言,譬如REXX 、Perl 、Tcl等。腳本引擎是處理腳本程序的COM(Component Object Model) 物件。
可以使用服務器端的腳原本產生客戶端的腳本。
ActiveX Server Components(ActiveX 服務器元件 )具備無限可擴充性。
能夠使用Visual Basic 、Java 、Visual C++ 、COBOL等編程語言來編寫你所須要的ActiveX Server Component 。
PHP:
數據庫鏈接
PHP能夠編譯成具備與許多數據庫相鏈接的函數。PHP與MySQL是如今絕佳的組合。你還能夠本身編寫外圍的函數去間接存取數據庫。經過這樣 的途徑當你更換使用的數據庫時,能夠輕鬆地更改編碼以適應這樣的變化。PHPLIB就是最經常使用的能夠提供通常事務須要的一系列基庫。但PHP提供的數據庫 接口支持彼此不統一,好比對Oracle, MySQL,Sybase的接口,彼此都不同。這也是PHP的一個弱點。
面向對象編程
PHP提供了類和對象。基於web的編程工做很是須要面向對象編程能力。PHP支持構造器、提取類等。
JSP:
將內容的生成和顯示進行分離
使用JSP技術,Web頁面開發人員能夠使用HTML或者XML標識來設計和格式化最終頁面。使用JSP標識或者小腳原本生成頁面上的動態內 容。生成內容的邏輯被封裝在標識和JavaBeans組件中,而且捆綁在小腳本中,全部的腳本在服務器端運行。若是核心邏輯被封裝在標識和Beans中, 那麼其餘人,如Web管理人員和頁面設計者,可以編輯和使用JSP頁面,而不影響內容的生成。
在服務器端,JSP引擎解釋JSP標識和小腳本,生成所請求的內容(例如,經過訪問JavaBeans組件,使用JDBCTM技術訪問數據庫, 或者包含文件),而且將結果以HTML(或者XML)頁面的形式發送回瀏覽器。這有助於做者保護本身的代碼,而又保證任何基於HTML的Web瀏覽器的完 全可用性。
強調可重用的組件
絕大多數JSP頁面依賴於可重用的,跨平臺的組件(JavaBeans或者Enterprise JavaBeans組件)來執行應用程序所要求的更爲複雜的處理。開發人員可以共享和交換執行普通操做的組件,或者使得這些組件爲更多的使用者或者客戶團 體所使用。基於組件的方法加速了整體開發過程,而且使得各類組織在他們現有的技能和優化結果的開發努力中獲得平衡。
採用標識簡化頁面開發
Web頁面開發人員不會都是熟悉腳本語言的編程人員。JavaServer Page技術封裝了許多功能,這些功能是在易用的、與JSP相關的XML標識中進行動態內容生成所須要的。標準的JSP標識可以訪問和實例化 JavaBeans組件,設置或者檢索組件屬性,下載Applet,以及執行用其餘方法更難於編碼和耗時的功能。
經過開發定製化標識庫,JSP技術是能夠擴展的。從此,第三方開發人員和其餘人員能夠爲經常使用功能建立本身的標識庫。這使得Web頁面開發人員可以使用熟悉的工具和如同標識同樣的執行特定功能的構件來工做。
JSP技術很容易整合到多種應用體系結構中,以利用現存的工具和技巧,而且擴展到可以支持企業級的分佈式應用。做爲採用Java技術家族的一部分,以及Java 2(企業版體系結構)的一個組成部分,JSP技術可以支持高度複雜的基於Web的應用。
因爲JSP頁面的內置腳本語言是基於Java編程語言的,並且全部的JSP頁面都被編譯成爲Java Servlet,JSP頁面就具備Java技術的全部好處,包括健壯的存儲管理和安全性。
做爲Java平臺的一部分,JSP擁有Java編程語言「一次編寫,各處運行」的特色。隨着愈來愈多的供應商將JSP支持添加到他們的產品中,您能夠使用本身所選擇的服務器和工具,更改工具或服務器並不影響當前的應用。
應用範圍
ASP是Microsoft開發的動態網頁語言,也繼承了微軟產品的一向傳統——只能運行於微軟的服務器產品,IIS(Internet Information Server) (windows NT)和PWS(Personal Web Server)(windows 98)上。Unix下也有ChiliSoft的插件來支持ASP,可是ASP自己的功能有限,必須經過ASP+COM的組合來擴充,Unix下的COM實 現起來很是困難。
PHP3可在Windows,Unix,Linux的Web服務器上正常運行,還支持IIS,Apache等通用Web服務器,用戶更換平臺時,無需變換PHP3代碼,可即拿即用。
JSP同PHP3相似,幾乎能夠運行於全部平臺。如Win NT,Linux,Unix. NT下IIS經過一個插件,例如JRUN或者ServletExec,就能支持JSP。著名的Web服務器Apache已經可以支持JSP。因爲 Apache普遍應用在NT、Unix和Linux上,所以JSP有更普遍的運行平臺。雖然如今NT操做系統佔了很大的市場份額,可是在服務器方面 Unix的優點仍然很大,而新崛起的Linux更是來勢不小。從一個平臺移植到另一個平臺,JSP和JavaBean甚至不用從新編譯,由於Java字 節碼都是標準的與平臺無關的。
性能比較
有人作過試驗,對這三種語言分別作循環性能測試及存取Oracle數據庫測試。
在循環性能測試中,JSP只用了使人吃驚的四秒鐘就結束了20000*20000的循環。而ASP、PHP測試的是2000*2000循環(少一個數量級),卻分別用了63秒和84秒。(參考PHPLIB)。
數據庫測試中,三者分別對 Oracle 8 進行 1000 次 Insert,Update,Select和Delete: JSP 須要 13 秒,PHP 須要 69 秒,ASP則 須要 73 秒。 前景分析 目前在國內PHP與ASP應用最爲普遍。而JSP因爲是一種較新的技術,國內採用的較少。但在國外,JSP已是比較流行的一種技術,尤爲是電子商務類的 網站,多采用JSP。
採用PHP的網站如新浪網(sina)、中國人(Chinaren)等,但因爲PHP自己存在的一些缺點,使得它不適合應用於大型電子商務站點,而更適合一些小型的商業站點。
首先,PHP缺少規模支持。其次,缺少多層結構支持。對於大負荷站點,解決方法只有一個:分佈計算。數據庫、應用邏輯層、表示邏輯層彼此分開, 並且同層也能夠根據流量分開,組成二維陣列。而PHP則缺少這種支持。還有上面提到過的一點,PHP提供的數據庫接口支持不統一,這就使得它不適合運用在 電子商務中。
ASP和JSP則沒有以上缺陷,ASP能夠經過Microsoft Windowsd的COM/DCOM得到ActiveX規模支持,經過DCOM和Transcation Server得到結構支持;JSP能夠經過SUN Java的Java Class和EJB得到規模支持,經過EJB/CORBA以及衆多廠商的Application Server得到結構支持。
三者中,JSP應該是將來發展的趨勢。世界上一些大的電子商務解決方案提供商都採用JSP/Servlet。比較出名的如IBM的 E-business,它的核心是採用JSP/Servlet的Web Sphere;西方另一個很是著名的電子商務軟件提供商,Intershop,它原來的產品Intershop1,2, 3, 4佔據了主要的電子商務軟件份額。
綜上所述,jsp應該更有前途!
PHP與ASP.NET優劣勢分析
無論你是否是已經選擇了PHP,根據它在以下表格中在價格、速度、效率、安全性、平臺支持性和開源與否上的表現,咱們都能判斷出它的強項是遠勝 於弱點的。惟一不足的是缺乏面向對象的支持。然而,這是個相對次要的缺陷,雖然不可忽視語言的結構,但是最終來講,優秀的編碼仍是歸結於反覆實踐、執行、 好習慣和紀律。
價格:我不會單純考量首次投資的價格,拿PHP來講,顯然是免費的,但咱們也要考慮開發、維護和調試的成本,你可能還要購買Zend優化引擎。 對於ASP,你在一開始就要投資購買產品,並且你還會在額外的技術上開銷,好比購買圖形處理的類庫,或是其它。但從長遠來看,PHP不會要求你去繳納升級 費用或是購買更多的license。任何曾經接觸過license的人都會知道公司每每會在確保產品的兼容性上花費大量時間和金錢。此外,發現bug並得 到修復的反饋處理狀況也不盡相同,這其實也可換算爲時間的消耗,進而影響到整個開發的成本。
速度和效率:就像我前面所提到的,ASP.NET是一個容許你使用多種不一樣編程語言的框架。此外,它還號稱擁有出色的面向對象編程模型。確實如 此,但是這卻帶來了速度上的下降。談到它的這些優勢,對於相同功能的頁面來講,比起PHP, 運行於ASP的頁面須要其服務器分析、執行更多的代碼。而PHP是「快餐型」的解決方案,先將功能搞定,還有不少健壯性上的問題能夠留到2.0或是3.0 裏進行補充,並且它的核心代碼獲得編譯的優化,程序能夠高速運行。速度並不是惟一的考量,內存的耗用也很重要。
安全性:ASP.NET運行於IIS之上,這是個曾無數次遭受攻擊的系統,幾乎每週IT的新聞上都會有相似消息。實際上,它已成爲一項負債,不 管整個市場投了多少美圓在上面,不少IT的專業人士已經拒絕將他們的網絡暴露於IIS Web服務器之下。而PHP與Apache工做在一塊兒,它擁有良好的速度、可靠性的表現,還有過硬的安全性。
平臺支持性:ASP.NET起初運行於IIS,如今也能夠運行於Apache,而Apache能運行於全部平臺。PHP天生就是設計運行於Apache上,因此你有不少被證實是可靠的平臺去選擇。
開源與否:開源並不是只是那些理想主義程序員們的專利,也不是那些想要在license上節省幾十美圓的公司所特有的。當你碰到所購買的軟件自己的bug的時候,開源可就是天賜良品。
不管是用ASP.NET仍是PHP,均可能有不少用戶用你的軟件並發現bug。對於ASP.NET,這些bug就要通過一個官僚的過程來告知, 修復,驗證,而後再等到下一個補丁時發佈。而PHP的修復和發佈都很快。任何看過開源開發的人都知道新的產品發佈或是補丁常常是幾天內的事情而不是商業軟 件那樣的幾周或幾個月。若是你認爲那還不夠快的話,若是你願意,你也能夠本身直接修復。
技術分析:.NET的優點與劣勢
.NET Framework自2002年3月在日本國內上市以來,至今已一年有餘。據估計標準集成.NET Framework的OS--Windows Server 2003將於2003年5月在日本上市。隨着.NET環境的完善,做爲足以抗衡Java的系統構築基礎,開發人員須要認識.NET Framework。下面筆者就來分析一下.NET的優點與劣勢。
XML Web服務並未成爲普及.NET的導火索
此前人們一直在想:「對.NET來講,是否存在不一樣於Java的、獨特的應用領域和市場?」。
業內廣泛認爲,微軟新一代系統構築環境--.NET Framework是在研究Java的基礎上開發出來的。不只功能和架構類似,並且因爲是在Java以後開發出來的,所以Java所沒有的功能更是隨處可見。好比在Web應用中實現事件驅動型應用程序功能等。
不過雖然說如此,若是隻是告訴用戶「.NET Framework比Java好得多」,那麼Java開發人員特地轉而使用.NET Framework的動機不會太強。
因爲Java已經先行積累了普遍的應用成果,積累了不少足以彌補其缺點的經驗以及平臺工具。只要不出現Java難以應用的用途和市場,那麼.NET Framework就很難阻止Java的進一步發展。
.NET的優點:企業信息系統部門可自行編程
剛開始,微軟就把易於開發XML Web服務做爲.NET的優點而大加宣傳。以XML Web服務爲前提而設計的.NET與Web服務具備極高的親和性。但XML Web服務的產生卻比較晚。儘管業內對它的期待和關注程度較高,但因爲可充分利用XML Web服務的「可賺錢的」業務模式還沒有確立,因此目前與Web站點相比其市場仍微不足道。其中,Java方面也正在加緊完善便於開發XML Web服務的功能。
那麼,是否存在.NET的獨特用途呢?筆者經過採訪所獲得的一個答案是:.NET開發工具--Visual Studo.NET的易用性使得它在Java很難實現的「用戶企業(信息系統部門)也可編程的系統」上超人一頭。筆者認爲可能還存在其餘這樣的領域。當 然,儘管.NET的標準語言VB.NET和C#都與Java同樣複雜,可是Visual Studo.NET卻很好地消除了這種複雜性。
好比,日本蘭碧兒(NOEVIR)只靠本身的信息系統部門就完成了Web代理店支援系統的從企劃到編程的所有工做。日本一家系統集成商曾表示,此前導入Java系統的用戶企業中「選用.NET的信息系統部門就有望自行開發或對系統進行修改」。
筆者認爲,因爲Java自己較爲複雜,且不易學習掌握,所以「用戶企業只負責企劃,而將編程工做徹底委託給集成商的現象很是廣泛」。
在COBOL和VB(客戶商/服務器)的全盛時期,信息系統部門本身編程、對系統進行部分修改和功能追加是很正常的事情。若是連細小的系統修改 都要外包,那麼系統的維護成本天然會很高,所以就將失去靈活性。甚至於還有可能削弱信息系統部門的業務能力。說到企劃,聽起來好聽,但若是連大致的狀況也 不瞭解,恐怕與開發商交涉都很困難。這也許就是Java的一個「弊端」吧。
此外,「成本比Unix低」以及「能夠充分利用Windows技術資源」等緣由也在加速.NET Framework的普及。做爲客戶端/服務器系統的開發環境,VB的後續語言--.NET中的「Windows Form」最具競爭力。愈來愈多的系統集成商開始選擇這一工具構築系統。
.NET的劣勢:應用成果少、開放性差
反過來講,.NET的劣勢則在於在大型系統中的應用成果少、缺少「開放性」。
對於應用成果來講,從此其數量將會不斷增長。據悉,日本Kabu.com證券將在2003年度內利用.NET Framework全面從新構築該公司目前利用ASP構築的系統。
在「開放性」方面又將會如何呢?Java普及的主要因素不少,但筆者認爲其中最關鍵的在於「開放性」。因爲可各類OS上運行,並且不少開發商還提供了Web應用服務器和開發工具,所以用戶能夠隨意選擇。而開發商則經過在功能和性能方面相互競爭來不斷提升產品水平。
而.NET Framework怎麼樣呢?只要想應用於業務系統中,其OS實際上則只能限於Windows。儘管微軟已經提供了FreeBSD版.NET Framework,但其目的僅限於學術研究。
從此人們所能期待的是Mono Project。Mono Project是指徹底獨立於微軟、正在開發開放源碼版.NET Framework的計劃。主導該計劃的是一家名爲Ximian的Linux企業,這家公司成功地開發了Linux標準桌面環境GNOME,目前已受到業 界的普遍關注。
2003年1月該計劃還發布了運行Web應用程序ASP.NET的Web服務軟件XSP。儘管不少功能仍在開發之中,但目前開發工做進展順利。 目前正面向Linux和Windows進行開發。據Mono Project稱,因爲該軟件依賴於Linux的部分很少,所以可以輕鬆地向其餘UNIX OS移植。
可否造成像Mono同樣的開放環境將是.NET普及的關鍵所在。微軟目前已經向業界標準化機構ECMA(歐洲計算機制造商協會)提交了.NET 標準,此舉代表微軟將採用開放標準。但目前尚不清楚此舉只是單純的一種姿態,仍是真的要開放.NET。這就要看微軟從此是否可以繼續公開足夠的相關標準和 信息了。
ASP.NET和PHP性能對比
通過一些篩選,只選擇一些表明性的見解進行翻譯, 對於英文不是太好的朋友比較有用, 若是有翻譯和知識點上的錯誤,請指出。
首先, 排除偏激和未經測試的見解, 讓咱們來看看interscape和ttuttle怎麼說
interscape(MVP) :
PHP是一個腳本語言, 而ASP.NET是一個面向對象, 編譯性的語言。你不能讓PHP在一個WINDOWS程序中運行, 可是你能夠拷貝ASP.NET的代碼並把它放到WINFORM程序裏面, 而不用太大的修改。 可是若是你要談及全部狀況下的性能, 也許PHP會好一些, 不過我會爲WEB開發選擇OOP(面向對象編程)而不是step-thru(順序編程)腳本編程方式。
ttuttle:
我不想去作任何專橫武斷(outrageous)的聲明, 可是讓咱們來看一下一些事實:
PHP已經被證實比ASP3.0稍微快一些
ASP.NET比ASP3.0快3~5倍(一種相似於PHP的解析性腳本語言)(注:ttuttle這句出自於http://www.asp.net/whitepaper/whyaspnet.aspx)
ASP.NET能夠存放在緩存(Output Caching)中, 當頁面第一次被訪問和編譯後, 它能夠從緩存中獲得。 沒有任何頁面處理器會比緩存更快。
在默認安裝下,ASP.NET是編譯性語言, 而PHP和ASP3.0則是解釋性語言。
面對這兩種孑然不一樣的解釋, 我再來看看ScottGu和 wysiwyg 還有 Xanderno怎麼說
ScottGu(http://www.asp.net s的版主):
ASP.NET是編譯性質而不是解釋性質的。 因此語句能夠被轉換爲更快的執行時間。
而PHP方面也有ZEND在出售其收費的編譯器ADD-ON.
然而, 咱們已經看到Nile benchmark(注:一種測試的性能基準,能夠參看其白皮書http://www.gotdotnet.com/team/compare/Nile %20Benchmark%20Results.doc)中, ASP.NET和SQL這種組合的速度比PHP和MYSQL快 2~3倍, 且近乎5倍快於PHP和ORACLE的運行效率(即使ZEND編譯器和緩存器已經安裝)
wysiwyg:
雖然這個主題是ASP.NET VS PHP, 可是我來講一下我測試的事實倒是 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)
我很但願本身的結果是ASP.NET快於ASP, 可是確相反, 誰能告訴我爲何??
(注: wysiwyg認爲他本身作是測試,可是沒有說明計算機和操做系統和測試環境的詳細狀況,也沒說明是否屬於哪一級別的壓力測試)
Xanderno:
在個人不完善的測試中, 採用ACT 做爲一種方法。 在一臺配置低機器上面, 用ASP經過
一個SQL SERVER上的數據庫獲取數據, 每秒種我能夠得到10~15頁數據 。 一樣的函數, 用ASP.NET, 每秒種我卻能夠得到30~40頁數據, 使用輸出緩存(output caching)後,
它上升爲120頁/秒。
微軟提供一系列壓力測試工具。 VS.NET企業版便有ACT, 若是你沒有VS企業版, WACT也是一種可行的方法.WAST website -- http://webtool.rte.microsoft.com/
============================
從以上三人的見解, 也許你們已經得出較爲正確的答案。 然而這些並非第一次在ASP.NET和PHP運行效率的討論。其餘討論, 還能夠參看Debate - .NET V. PHP: Top 6 Reasons to Use NET(http://www.sitepoint.com/article/871)
還有Top 10 .NET Myths Exposed(http://www.webmasterbase.com/article/870)。
固然你有時間, 還能夠看看由Owendo Technology作的Web Application Server Panorama(Web應用程序服務器全景)報告。這是一篇長達279頁的報告。(http://e-serv.ebizq.net/shared/goldclub.jsp?owendo_1b.html )。
此外,還有人問了這樣一個問題"VB.NET和C#哪一個更快?"
Daniel P. 這樣回答: 他們並無區別, VB.NET和C#都是轉換成 IL-Code(中間語言代碼)---用來編譯主程序的。
(注: 這種說法不必定正確, 二者的編譯器是不同的, 並且這個結論也沒有通過嚴格的壓力測試)
最後, 也許你們老是以爲程序員之間這種討論看起來很funny, 不少人老是帶有主觀性進行討論, 連一些編程大師級的老外也像小孩子同樣在爭論。 可是沒有本身所愛的語言, 沒有這種狂熱又怎會有技術的進步。
評價:
沒有任何東西是完美的!
沒有最牛X的職業,只有不斷開發新方法的玩家!