PHP与JSP上演超详细性能测试大PK(1)(2)
分享于 点击 18059 次 点评:70
三.数据库查询
a.测试标准
循环N次做数据库打开,查询,关闭操作。主要对JSP直接连数据库,JSP连接池连数据训,PHP直接连数据库,PHP持久连数据库做比较。
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连数据库的,因为没连接池可用,特意在网上找了一些资料,没发现PHP可用的连接池,相关提法都很少,很多PHP程序员甚至没听过这概念,这样的结果,确实让我也大吃一惊。不过,话说回来,pconnect的原理,和连接池差不多的,都是程序关闭连接,但PHP并不真正关闭,再次打开时,直接使用可用的连接。但是,PHP的实现确实比Java方便多了,只需加个字母,就轻易实现,Java则麻烦一些,我配置Tomcat的连接池都费了些时间,按官方文档,在tomcat5.0.28下没配置成功,在CSDN上面,也看到很多新手发出求救,很多配置不成功的,最后自己摸索出来了,配置方法可参考我的Blog。
如果将连接数据库和关闭数据库的操作,移到循环外面,刚PHP和JSP的执行时间都差不多,循环50次约16ms。可见,数据库操作中,打开连接是相当耗资源的,其它操作,与语言差别不大。JSP在连接数据库的时候,开销比PHP大很多。(这里特意将打开数据库操作放在循环体做比较)
用户点评