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