小編給大家分享一下PHP與JSP的性能測試比較,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
成都創(chuàng)新互聯(lián)專注于堆龍德慶企業(yè)網(wǎng)站建設,成都響應式網(wǎng)站建設公司,商城網(wǎng)站建設。堆龍德慶網(wǎng)站建設公司,為堆龍德慶等地區(qū)提供建站服務。全流程按需開發(fā),專業(yè)設計,全程項目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務
測試環(huán)境:
◆硬件:P4 2.4G,1G內(nèi)存
◆軟件:WindowsXP+Apache2.0.54+PHP4.4.0+MySQL4.1.14+Tomcat5.0.28
一.算術運算
a.測試標準
循環(huán)N次,并做整型自加運算。
b.測試代碼
測試結果(單位:毫秒)
測試結果說明:m-n表示主要波動范圍介于m和n之間;n表示出現(xiàn)次數(shù)非常之多的數(shù)值或平均值,m(x,y)表示偶爾會出現(xiàn)x,y。以下相同。
c.結論
Java的算術運算,優(yōu)化得很好,估計是直接的對應CPU的指令,數(shù)值再大,算術運算性能都很平穩(wěn)。需要注意的是,long的運算時間要比int的運算時間要長一些(畢竟是32位的系統(tǒng)),所以,在無需用到long時,盡量不要用long,而用int.
PHP是弱類型的變量,算術運算很不盡人意,估計不是直接對應機器碼的算術運算。PHP算術運算的過程猜測如下,在運算前需要檢測變量是否是數(shù)值,并要將非數(shù)值轉換成數(shù)值,比如,PHP可以做這樣的運算:100+"zhoutang",結果等于100.正是因為是弱類型語言,加上運算前的檢測和轉換,所以才導致算術運算的性能低下。PHP的單次運算時間比較穩(wěn)定,大概每10000次算術加運算花費的時間約為3.5ms
不同的運算方法,也對性能有影響。
二.字符串運算
a.測試標準
字符串連接運算對比。
b.測試
測試結果(單位:毫秒)
c.結論
Java的字符串是用對象處理,很明顯,在字符串的比較過程中,Java比PHP差很遠。(因為字符串操作,很大部分要做連接,這里只比較連接運算,另外粗略比較了一下substring,兩者的差別不是很大)
PHP的字符串運算,估計很多是直接調(diào)用C的字符串函數(shù),所以效率會高很多。在做Web開發(fā)中,字符串的連接操作還是很頻繁的(包括很多時候生成SQL字符串),所以,在算術運算和字符串運算兩個方面,Java(JSP)優(yōu)勢不明顯,與PHP各有所長。
三.數(shù)據(jù)庫查詢
a.測試標準
循環(huán)N次做數(shù)據(jù)庫打開,查詢,關閉操作。主要對JSP直接連數(shù)據(jù)庫,JSP連接池連數(shù)據(jù)訓,PHP直接連數(shù)據(jù)庫,PHP持久連數(shù)據(jù)庫做比較。
b.測試代碼
JSP String dbUrl, dbUser, dbPwd, strSQL; dbUrl = "jdbc:mysql://localhost:3306/zhoutang"; dbUser = "root"; dbPwd = ""; strSQL = "update tblUser set UserLC=UserLC+1 where UserID=100"; Class.forName("com.mysql.jdbc.Driver"); Connection con; Statement stmt; int i = 0; while (i < XXX) { con = DriverManager.getConnection(dbUrl,dbUser,dbPwd); stmt = con.createStatement(); stmt.executeUpdate(strSQL); stmt.close(); con.close(); stmt = null; con = null; i++; }
JSP連接池 Context ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/mysql"); String strSQL = "update tblUser set UserLC=UserLC+1 where UserID=100"; Connection con; Statement stmt; int i = 0; while (i < XXXX) { con = ds.getConnection(); stmt = con.createStatement(); stmt.executeUpdate(strSQL); stmt.close(); con.close(); stmt = null; con = null; i++; }
PHP $dbHost = "localhost"; $dbUser = "root"; $dbPwd = ""; $dbName = "zhoutang"; $strSQL = "update tblUser set UserLC=UserLC+1 where UserID=100"; $i = 0; while ($i < XXXX) { $link = mysql_connect($dbHost, $dbUser, $dbPwd) or die('Could not connect: ' . mysql_error()); mysql_select_db($dbName); mysql_query($strSQL); mysql_close($link); $i++; }
PHP持久連接 $dbHost = "localhost"; $dbUser = "root"; $dbPwd = ""; $dbName = "zhoutang"; $strSQL = "update tblUser set UserLC=UserLC+1 where UserID=100"; $i=0; while ($i< XXXX) { $link = mysql_pconnect($dbHost, $dbUser, $dbPwd) or die('Could not connect: ' . mysql_error()); mysql_select_db($dbName); mysql_query($strSQL); mysql_close($link); $i++; }
測試結果(單位:毫秒)
c.結論
普通連接,Java連Mysql的速度是要比PHP慢的一倍左右。Java使用連接池技術,性能提升非常明顯。
PHP使用的持久連接(pconnect)性能即然相當于Java的連接池,結果實在讓人不可思議,本來挺擔心PHP連數(shù)據(jù)庫的,因為沒連接池可用,特意在網(wǎng)上找了一些資料,沒發(fā)現(xiàn)PHP可用的連接池,相關提法都很少,很多PHP程序員甚至沒聽過這概念,這樣的結果,確實讓我也大吃一驚。不過,話說回來,pconnect的原理,和連接池差不多的,都是程序關閉連接,但PHP并不真正關閉,再次打開時,直接使用可用的連接。但是,PHP的實現(xiàn)確實比Java方便多了,只需加個字母,就輕易實現(xiàn),Java則麻煩一些,我配置Tomcat的連接池都費了些時間,按官方文檔,在tomcat5.0.28下沒配置成功,在CSDN上面,也看到很多新手發(fā)出求救,很多配置不成功的,***自己摸索出來了,配置方法可參考我的Blog。
如果將連接數(shù)據(jù)庫和關閉數(shù)據(jù)庫的操作,移到循環(huán)外面,剛PHP和JSP的執(zhí)行時間都差不多,循環(huán)50次約16ms??梢姡瑪?shù)據(jù)庫操作中,打開連接是相當耗資源的,其它操作,與語言差別不大。JSP在連接數(shù)據(jù)庫的時候,開銷比PHP大很多。(這里特意將打開數(shù)據(jù)庫操作放在循環(huán)體做比較)
四.文件操作
在Web開發(fā)過程上,文件操作一般不可缺少,大多數(shù)Web系統(tǒng)都會上傳或對文件操作。
a.測試標準
綜合測試各種文件操作,測試的過程是首先判斷某文件是否存在,存在的話刪除文件,再新建文件,再往文件里寫一定長度的內(nèi)容。整個過程循環(huán)N次。
b.測試結果
JSP測試代碼: String fileName = "jsp.txt"; String filePath = request.getRealPath(""); int i = 0; int j = 0; while (i < XXXX) { File f = new File(filePath,fileName); if (f.exists()) { f.delete(); } f.createNewFile(); FileWriter fw = new FileWriter(filePath + File.separator + fileName); j = 0; while (j < 2 * i) { fw.write(j + "\r\n"); j++; } fw.close(); i++; }
PHP測試代碼: $fileName = "./php.txt"; $i = 0; while ($i < XXXX) { if (file_exists($fileName)) { unlink($fileName); } $handle = fopen($fileName, "x"); $j = 0; while ($j < 2 * $i) { fwrite($handle,$j."\r\n"); $j++; } fclose($handle); $i++; }
測試結果(單位:毫秒)
c.結論
這個測試結果有點意外,本以為PHP會大勝的項目,卻讓JSP***,循環(huán)次數(shù)大的時候,PHP比JSP慢一倍。有點不可思議。
五.總結
總體來說,PHP與JSP在性能上,差別不了很遠,各有優(yōu)勢。JSP雖是編譯執(zhí)行,但卻要通過JVM,性能會有所下降。從功能上說,JSP的相對強大一些,主要是因為有Java的支撐,在一些很大型的企業(yè)中,用JSP有優(yōu)勢(主要是有Java支撐),但一般的企業(yè)或一般的應用,PHP完全可以應付。另外,PHP比JSP更容易上手。另外,個人說為,做同樣的WEB系統(tǒng),PHP相對JSP來說,復雜度可能會低一些(JSP所有的技術都用上的話,估計架構環(huán)境,系統(tǒng)設計都夠麻煩的,而且,Java體系各種技術和產(chǎn)品比較開放和松散,文檔相對來說有點雜亂,至少我認為Tomcat的文檔做得沒有Apache,PHP的好。)。
PHP小巧而靈活,JSP就顯得寵大,而且,概念眾多,個人認為Java體系有故意夸大技術復雜度的嫌疑。
此外,PHP還有Zend可用,本來想裝上Zend再來測試一番的,這幾天Zend的網(wǎng)站老是上不去。據(jù)有關測試表明,Zend能提升PHP的性能大約100%左右。也有說30-40%的,也有說600%的。估計是算術運算能提升個檔次,其它操作,最多提升30-40%左右。
在整個測試過程中,每個取值我都會測多次,一般10s以下的運算,我至少測10次,10s以上的運算,至少測3次。PHP的測試結果都比較穩(wěn)定,每次測出的結果差別不是很大,從統(tǒng)計學的角度來說,方差比較小。JSP相對來說,偶爾會出現(xiàn)一些值,偏離平均值比較遠,而且,由于需要編譯的原因,***執(zhí)行一般時間比較長(雖然從程序里顯示的數(shù)值看不出***執(zhí)行的時間差距,但在程序開始執(zhí)行前,編譯需要點時間。編譯后才開始執(zhí)行,所以程序顯示的結果看不出來。),所以,JSP的測試,沒取***運行的結果。
另外,在測試連接數(shù)據(jù)庫的過程中,由于一時疏忽,忘了在循環(huán)體內(nèi)i++,導致出現(xiàn)死循環(huán)。所以,也特意做了幾個死循環(huán)測試。算術運算測試,JSP死循環(huán)時,瀏覽器點了停止按鈕,tomcat仍繼續(xù)執(zhí)行,CPU一直是100%,只有在任務管理器里停了tomcat,才得以停止死循環(huán);PHP算術運算死循環(huán),由于php.ini里有設置程序執(zhí)行的最長時間和***內(nèi)存,所以,死循環(huán)能夠自動結束。數(shù)據(jù)庫連接死循環(huán),JSP在循環(huán)大概900多次后,出現(xiàn)異常,報錯,提示無法連接;PHP循環(huán)1500次后,仍然沒有結束,只好在任務管理器里結束apache進程(我的php.ini設置PHP最長執(zhí)行時間為300秒)。
六.其它環(huán)境簡單測試
以上數(shù)據(jù)只能做為參考,同樣的程序,在其它配置的系統(tǒng),我也做了簡單的測試:
I.p4 2.4G,512M DDR,Windows server2000的工作機
(安裝東西比較多,比較亂,運行一年多沒重裝,由于是工作機,所以操作系統(tǒng)對應用程序優(yōu)化,而不是對后端服務優(yōu)化;所測得的數(shù)據(jù),比XP下測得的數(shù)據(jù)要大很多,比如PHP連接Mysql循環(huán)500次,大約需要16000ms。),粗略的測試的結果是:
算術運算和字符串運算:算術運算,JSP領先很多,字符串運算,PHP領先很多,和測試機的結果一致。
連接數(shù)據(jù)庫:PHP與JSP連Mysql速度差距不大,PHP大概快20%左右,奇怪的是我用pconnect連與connect是一樣的結果,未測試JSP的連接池。估計JSP用連接池會快很多。
文件操作:PHP的文件操作比JSP性能高出約30%!與測試機的結果有點相差比較大,PHP領先。
II.p4 2.66G,1G DDR,Linux 以上是“PHP與JSP的性能測試比較”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
分享文章:PHP與JSP的性能測試比較
本文路徑:http://weahome.cn/article/gseeij.html