一些廢話
關(guān)于PHP和JSP的運(yùn)行速度之比較,兩者的起源地--美國的網(wǎng)路上已經(jīng)爭論了很長時間。給人的感覺是PHP社群總是說沒有任何官方任何的測試標(biāo)明JSP一定要比PHP快速,但是JSP社群也總是堅持編譯執(zhí)行的JSP在先天就比解釋執(zhí)行(由于Zend公司的努力,現(xiàn)在的PHP也應(yīng)該是接近編譯模式運(yùn)行了)的PHP要快速。就我本人的觀點(diǎn),兩者的運(yùn)行速度比較實(shí)際上意義并沒有想象中那么重大--在一個PHP的工程中,我們絕對依賴PHP;而在一個用到JSP的工程中,很多情況下JSP只是起到MVC模式中的表示或者控制的作用,真正的支持還在于其后真正的Java家族(比如Servlet,Bean甚至是EJB等等)。因此如果過分看重PHP和JSP在各自速度上的比較,可能并不能說明由該兩種技術(shù)構(gòu)建的工程的速度因素。(至于說是否存在完全由JSP構(gòu)建的工程,我想是有的,不過希望以后維護(hù)這個工程的家伙不是我)
但是我還是做了幾次有趣的測試--畢竟讓代碼們用數(shù)字展示各自的能力是一件很奇妙的事情,并且之前我也做過有關(guān)PHP代碼速度測試和優(yōu)化的工作,由此獲得的一些成就感很容易讓人忘記自己在其上花費(fèi)了一夜時間。其實(shí)我做的工作也很簡單,先是比較一些簡單運(yùn)算的速度,然后是測試和數(shù)據(jù)庫連接的速度。我的用意是把前者比作一般的表示層和控制層的工作,而后者則被希望表示一般的邏輯層所作的工作。還是MVC模式。
開始測試
照例是要把測試的環(huán)境介紹一下,我采用了一臺Linux(我的開發(fā)環(huán)境)和一臺Windows(我的豬窩了)機(jī)器進(jìn)行相同的測試(這樣也可以順便讓Linux再羞辱Windows一次)--所謂相同是指代碼的內(nèi)容相同--非常感謝我喜歡的這兩種語言都是跨平臺的。具體的配置如下:
(猜猜看同樣的代碼在哪臺機(jī)器上跑得快哪?下面你將會得到答案)
然后就是一些簡單的Coding。我把寫好的JSP放在了Linux平臺上,首先是1000×1000次的算術(shù)運(yùn)算操作,采用兩個for循環(huán)完成它。這樣的循環(huán)次數(shù)比較保守,因為我也不知道JSP究竟是否能在我不耐煩的按下瀏覽器的"停止"按鈕之前執(zhí)行完它們--可是事實(shí)卻讓我小小的吃驚了一次--在大約13毫秒左右的時間內(nèi)這樣數(shù)目巨大的循環(huán)被完成了。于是我又很不平衡的在兩個循環(huán)的最大數(shù)后面各加了一個0--10000×10000次循環(huán)!不出我所料,等待的時間也不過是1.33-1.34秒左右。應(yīng)該說,在沒有寫PHP的相關(guān)功能之前,我已經(jīng)感覺到了JSP的強(qiáng)大速度優(yōu)勢。
好了,讓我們再來看看PHP在Linux和Apache中的表現(xiàn)--1000×1000勉強(qiáng)通過,但是花費(fèi)了竟然有5秒左右之巨;隨后的10000×10000次測試真是一場災(zāi)難,我在頁面中設(shè)置了PHP的執(zhí)行時限為不限,但是結(jié)果是對于我來說這段代碼真正的是不限時間的在孜孜不倦的運(yùn)行,始終沒有返回。OK,STOP IT!所以這一項測試沒有結(jié)果。
在Windows平臺的表現(xiàn)一樣,不過看來速度都慢了一些,這個結(jié)果讓我心理很安慰。
下面一項是連接和操作數(shù)據(jù)庫的測試,我選擇了MySQL。從上面的測試環(huán)境中可以看出在Linux機(jī)器上另有Oracle在運(yùn)行著,但是有兩個原因讓我并沒有使用Oracle參與測試,一是考慮到MySQL在Linux平臺上已經(jīng)得到了廣泛的應(yīng)用;二是Oracle在我周圍的客戶中使用并不多見。選擇的數(shù)據(jù)庫操作是SELECT,而且看來不能像普通的算術(shù)運(yùn)算那樣動輒就是1000×1000,我首先選擇了10×10的二重循環(huán)。很明顯,JSP在進(jìn)行數(shù)據(jù)庫操作時要比普通運(yùn)算時慢了許多,讓我等待了260毫秒左右;而當(dāng)我鼓起勇氣對JSP進(jìn)行100×100測試之后,我才發(fā)現(xiàn)自己又陷于一場漫長的等待--最終29秒左右完成了這一操作。
對于PHP,我沒有抱很大希望,先前的測試已經(jīng)說明了PHP的普通運(yùn)算能力確實(shí)有所欠缺。但是LAMP的組合又讓我看到了速度的影子--實(shí)際的測試結(jié)果讓我吃驚不小,10×10的測試PHP幾乎在瞬間完成(85毫秒左右),而100×100的測試也僅僅花費(fèi)了8.33秒左右。
以下是測試的條件和數(shù)據(jù)表,這里(speed_test.zip)可以下載測試用例:
結(jié)論
以上的測試只是我突發(fā)感慨而來的產(chǎn)物,那時我正在考慮一個簡單的基于Web的商店是否值得完全使用JSP來實(shí)施--雖然我一直非常中意MVC模式并且在PHP中也引入了這樣的概念,但是對于Web項目的"超快速開發(fā)"來說采用完全JSP倒也不失為達(dá)到目標(biāo)并且可以有效保證項目的開發(fā)速度和運(yùn)行速度的一種方式。于是我就想到了應(yīng)該測試一下JSP和PHP的差距。不過結(jié)果并不能讓我滿意--在數(shù)據(jù)庫的連接方面,借助JDBC可以達(dá)到數(shù)據(jù)庫層的透明,但是速度上似乎有了許多的折扣;至于那種1000×1000的計算,如果有這樣的網(wǎng)上商店會經(jīng)常使用的話,我非常樂意認(rèn)識一下這個項目的負(fù)責(zé)人并且好好學(xué)習(xí)一次。
因此,這次測試也許會讓一些JSP的支持者失望,PHP從速度角度來說,我認(rèn)為完全可以接受其應(yīng)用在各種Web項目中。當(dāng)然,對于電子商務(wù)以及其他關(guān)鍵應(yīng)用采用何種技術(shù)的話題,已經(jīng)超過了本文的范疇,我在這里只想多闡述一些我的觀點(diǎn):毫無疑問Java技術(shù)已經(jīng)成為了以上這些關(guān)鍵應(yīng)用的事實(shí)技術(shù)標(biāo)準(zhǔn),因為她的豐富內(nèi)涵和相對簡單的開發(fā)以及產(chǎn)品的強(qiáng)壯性都非常容易被我們所接受;而顯然將PHP和Java技術(shù)在Web上的應(yīng)用相比是毫無道理的、結(jié)果也是非常明顯的,同樣將PHP和JSP相比也只是不合適的--JSP在整個Java戰(zhàn)略中只是算不上核心的一塊,而PHP哪--只有PHP,完全PHP。不過作為LAMP的一分子,越來越受到重視的PHP在中小型項目以及非關(guān)鍵應(yīng)用中的能力不容懷疑。
本文轉(zhuǎn)摘自『IT學(xué)習(xí)者』
http://www.itlearner.com/article/2006/3039.shtml
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點(diǎn)擊舉報。