`
tboss
  • 浏览: 45459 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
最近访客 更多访客>>
社区版块
存档分类
最新评论

PHP与JSP上演超详细性能测试大PK

阅读更多

在网上有多关于PHP与JSP的性能比较,有些结果表明PHP比JSP性能低了很多,本文将客观的展现PHP与JSP的性能测试比较,且都为真实数据。当然, 这里面并没有包含.Net。

测试环境:

◆硬件:P4 2.4G,1G内存

◆软件:WindowsXP+Apache2.0.54+PHP4.4.0+Mysql4.1.14+Tomcat5.0.28

一.算术运算

a.测试标准

循环N次,并做整型自加运算。

b.测试代码

测试代码

测试结果(单位:毫秒)

 

测试结果

测试结果说明:m-n表示主要波动范围介于m和n之间;n表示出现次数非常之多的数值或平均值,m(x,y)表示偶尔会出现x,y。以下相同。

c.结论

Java的算术运算,优化得很好,估计是直接的对应CPU的指令,数值再大,算术运算性能都很平稳。需要注意的是,long的运算时间要比int的运算时间要长一些(毕竟是32位的系统),所以,在无需用到long时,尽量不要用long,而用int.

PHP是弱类型的变量,算术运算很不尽人意,估计不是直接对应机器码的算术运算。PHP算术运算的过程猜测如下,在运算前需要检测变量是否是数值,并要将非数值转换成数值,比如,PHP可以做这样的运算:100+"zhoutang",结果等于100.正是因为是弱类型语言,加上运算前的检测和转换,所以才导致算术运算的性能低下。PHP的单次运算时间比较稳定,大概每10000次算术加运算花费的时间约为3.5ms

不同的运算方法,也对性能有影响。

二.字符串运算

a.测试标准

字符串连接运算对比。

b.测试

测试

测试结果(单位:毫秒)

测试结果

c.结论

Java的字符串是用对象处理,很明显,在字符串的比较过程中,Java比PHP差很远。(因为字符串操作,很大部分要做连接,这里只比较连接运算,另外粗略比较了一下substring,两者的差别不是很大)

PHP的字符串运算,估计很多是直接调用C的字符串函数,所以效率会高很多。在做Web开发中,字符串的连接操作还是很频繁的(包括很多时候生成SQL字符串),所以,在算术运算和字符串运算两个方面,Java(JSP)优势不明显,与PHP各有所长。

三.数据库查询

a.测试标准

循环N次做数据库打开,查询,关闭操作。主要对JSP直接连数据库,JSP连接池连数据训,PHP直接连数据库,PHP持久连数据库做比较。

b.测试代码

  1. JSP  
  2.  
  3. String dbUrl, dbUser, dbPwd, strSQL;  
  4. dbUrl = "jdbc:mysql://localhost:3306/zhoutang";  
  5. dbUser = "root";  
  6. dbPwd = "";  
  7. strSQL = "update tblUser set UserLC=UserLC+1 where UserID=100";   
  8. Class.forName("com.mysql.jdbc.Driver");  
  9. Connection con;  
  10. Statement stmt;  
  11.  
  12. int i = 0;  
  13. while (i < XXX) {  
  14.       con = DriverManager.getConnection(dbUrl,dbUser,dbPwd);  
  15.       stmt = con.createStatement();  
  16.       stmt.executeUpdate(strSQL);  
  17.       stmt.close();  
  18.       con.close();  
  19.       stmt = null;  
  20.       con = null;  
  21.       i++;  

 

  1. JSP连接池   
  2.  
  3. Context ctx = new InitialContext();  
  4. DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/mysql");   
  5. String strSQL = "update tblUser set UserLC=UserLC+1 where UserID=100";  
  6.  
  7. Connection con;  
  8. Statement stmt;  
  9.  
  10. int i = 0;  
  11. while (i < XXXX) {  
  12.       con = ds.getConnection();  
  13.       stmt = con.createStatement();  
  14.       stmt.executeUpdate(strSQL);  
  15.       stmt.close();  
  16.       con.close();  
  17.       stmt = null;  
  18.       con = null;  
  19.       i++;  
  1. PHP   
  2.  
  3. $dbHost = "localhost";  
  4. $dbUser = "root";  
  5. $dbPwd = "";  
  6. $dbName = "zhoutang";  
  7. $strSQL = "update tblUser set UserLC=UserLC+1 where UserID=100";   
  8. $i = 0;  
  9. while ($i < XXXX) {  
  10.       $link = mysql_connect($dbHost, $dbUser, $dbPwd) or die('Could not connect: ' . mysql_error());  
  11.       mysql_select_db($dbName);  
  12.       mysql_query($strSQL);  
  13.       mysql_close($link);  
  14.       $i++;  
  1. PHP持久连接   
  2.  
  3. $dbHost = "localhost";  
  4. $dbUser = "root";  
  5. $dbPwd = "";  
  6. $dbName = "zhoutang";  
  7. $strSQL = "update tblUser set UserLC=UserLC+1 where UserID=100";   
  8. $i=0;  
  9. while ($i< XXXX) {  
  10.       $link = mysql_pconnect($dbHost, $dbUser, $dbPwd) or die('Could not connect: ' . mysql_error());  
  11.       mysql_select_db($dbName);  
  12.       mysql_query($strSQL);  
  13.       mysql_close($link);  
  14.       $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大很多。(这里特意将打开数据库操作放在循环体做比较)

四.文件操作

在Web开发过程上,文件操作一般不可缺少,大多数Web系统都会上传或对文件操作。

a.测试标准

综合测试各种文件操作,测试的过程是首先判断某文件是否存在,存在的话删除文件,再新建文件,再往文件里写一定长度的内容。整个过程循环N次。

b.测试结果

  1. JSP测试代码:  
  2.  
  3. String fileName = "jsp.txt";  
  4. String filePath = request.getRealPath("");   
  5. int i = 0;  
  6. int j = 0;  
  7. while (i < XXXX) {  
  8.       File f = new File(filePath,fileName);   
  9.       if (f.exists()) {   
  10.             f.delete();  
  11.       }  
  12.       f.createNewFile();  
  13.       FileWriter fw = new FileWriter(filePath + File.separator + fileName);  
  14.       j = 0;  
  15.       while (j < 2 * i) {  
  16.             fw.write(j + "\r\n");  
  17.             j++;  
  18.       }  
  19.       fw.close();  
  20.       i++;  
  1. PHP测试代码:  
  2.  
  3. $fileName = "./php.txt";   
  4. $i = 0;  
  5. while ($i < XXXX) {  
  6.       if (file_exists($fileName)) {  
  7.             unlink($fileName);  
  8.       }  
  9.       $handle = fopen($fileName, "x");  
  10.       $j = 0;  
  11.       while ($j < 2 * $i) {  
  12.             fwrite($handle,$j."\r\n");  
  13.             $j++;  
  14.       }  
  15.       fclose($handle);  
  16.       $i++;  

测试结果(单位:毫秒)

测试结果

c.结论

这个测试结果有点意外,本以为PHP会大胜的项目,却让JSP遥遥领先,循环次数大的时候,PHP比JSP慢一倍。有点不可思议。

五.总结

总体来说,PHP与JSP在性能上,差别不了很远,各有优势。JSP虽是编译执行,但却要通过JVM,性能会有所下降。从功能上说,JSP的相对强大一些,主要是因为有Java的支撑,在一些很大型的企业中,用JSP有优势(主要是有Java支撑),但一般的企业或一般的应用,PHP完全可以应付。另外,PHP比JSP更容易上手。另外,个人说为,做同样的WEB系统,PHP相对JSP来说,复杂度可能会低一些(JSP所有的技术都用上的话,估计架构环境,系统设计都够麻烦的,而且,Java体系各种技术和产品比较开放和松散,文档相对来说有点杂乱,至少我认为Tomcat的文档做得没有Apache,PHP的好。)。

PHP小巧而灵活,JSP就显得宠大,而且,概念众多,个人认为Java体系有故意夸大技术复杂度的嫌疑。

此外,PHP还有Zend可用,本来想装上Zend再来测试一番的,这几天Zend的网站老是上不去。据有关测试表明,Zend能提升PHP的性能大约100%左右。也有说30-40%的,也有说600%的。估计是算术运算能提升个档次,其它操作,最多提升30-40%左右。

在整个测试过程中,每个取值我都会测多次,一般10s以下的运算,我至少测10次,10s以上的运算,至少测3次。PHP的测试结果都比较稳定,每次测出的结果差别不是很大,从统计学的角度来说,方差比较小。JSP相对来说,偶尔会出现一些值,偏离平均值比较远,而且,由于需要编译的原因,首次执行一般时间比较长(虽然从程序里显示的数值看不出首次执行的时间差距,但在程序开始执行前,编译需要点时间。编译后才开始执行,所以程序显示的结果看不出来。),所以,JSP的测试,没取首次运行的结果。

另外,在测试连接数据库的过程中,由于一时疏忽,忘了在循环体内i++,导致出现死循环。所以,也特意做了几个死循环测试。算术运算测试,JSP死循环时,浏览器点了停止按钮,tomcat仍继续执行,CPU一直是100%,只有在任务管理器里停了tomcat,才得以停止死循环;PHP算术运算死循环,由于php.ini里有设置程序执行的最长时间和最大内存,所以,死循环能够自动结束。数据库连接死循环,JSP在循环大概900多次后,出现异常,报错,提示无法连接;PHP循环1500次后,仍然没有结束,只好在任务管理器里结束apache进程(我的php.ini设置PHP最长执行时间为300秒)。

六.其它环境简单测试

以上数据只能做为参考,同样的程序,在其它配置的系统,我也做了简单的测试:

I.p4 2.4G,512M DDR,Windows server2000的工作机

(安装东西比较多,比较乱,运行一年多没重装,由于是工作机,所以操作系统对应用程序优化,而不是对后端服务优化;所测得的数据,比XP下测得的数据要大很多,比如PHP连接Mysql循环500次,大约需要16000ms。),粗略的测试的结果是:

算术运算和字符串运算:算术运算,JSP领先很多,字符串运算,PHP领先很多,和测试机的结果一致。

连接数据库:PHP与JSP连Mysql速度差距不大,PHP大概快20%左右,奇怪的是我用pconnect连与connect是一样的结果,未测试JSP的连接池。估计JSP用连接池会快很多。

文件操作:PHP的文件操作比JSP性能高出约30%!与测试机的结果有点相差比较大,PHP领先。

II.p4 2.66G,1G DDR,Linux服务器

算术运算和字符串运算:和其它环境测试结果一致,JSP在算术运算时领先,PHP在字符串运算时领先很多很多。

连接数据库:执行500次循环,PHP用connect连接,花费185ms,PHP使用pconnect连接,花费70ms;JSP未用连接池,花费2030ms。

文件操作:JSP领先很多,1000次循环,JSP花费1500ms左右,PHP花费7000ms左右。

III.总结

不管什么平台系统,测试结果表明,JSP和PHP在做Web开发时,性能差距不大,只能说各有所长,JSP在数据库操作以及字符串操作方面不如PHP,而PHP在文件操作及算术运算是,不及JSP。

此外,同种语言,在不同的平台表现也不一样,根据我的测试结果表明,Linux下PHP,JSP的性能都要优于Windows的。

七.运行时间的获取

 

  1. JSP  
  2.  
  3. long timeStart = 0;  
  4. long timeEnd = 0;  
  5. timeStart = Calendar.getInstance().getTimeInMillis();  
  6.  
  7. //中间代码  
  8.  
  9. timeEnd = Calendar.getInstance().getTimeInMillis();  
  10. out.println("开始时间:" + timeStart + "毫秒<br>");  
  11. out.println("结束时间:" + timeEnd + "毫秒<br>");  
  12. out.println("花费时间:" + (timeEnd - timeStart) + "毫秒<br>"); 

 

 

  1. PHP  
  2.  
  3. $timeStart = 0;  
  4. $timeEnd = 0;  
  5. $timeStart = mictime();  
  6.  
  7. //中间代码  
  8.  
  9. $timeEnd = mictime();  
  10. echo "开始时间:".$timeStart."毫秒<br>";  
  11. echo "结束时间:".$timeEnd."毫秒<br>";  
  12. echo "花费时间:".($timeEnd - $timeStart)."毫秒<br>";  
  13.  
  14. function mictime() {  
  15.       //由于PHP支持不支持long型,所以,只取了5位秒数,再加上毫秒。时间段比较,前面的可以忽略  
  16.       list($usec, $sec) = explode(" ", microtime());  
  17.       $sec = substr($sec, -5);  
  18.       $usec = ceil($usec * 1000);  
  19.       while (strlen($usec) < 3) {  
  20.             $usec="0".$usec;  
  21.       }  
  22.       return $sec.$usec;  
分享到:
评论

相关推荐

    asp/php/jsp性能比较

    - **性能**:JSP通常被认为在处理高负载和复杂任务时性能最优,尤其是在大规模企业应用中;PHP在轻量级应用和中小型企业网站中表现出色;ASP.NET也具有较高的性能,特别是在.NET Framework的最新版本中。 #### 开发...

    jsp资料及详细介绍以及详情

    4. 测试JSP页面,查看浏览器中的输出。 5. 添加服务器端逻辑,如使用Java表达式或脚本元素处理数据。 6. 调试和优化JSP代码。 **7. 实验数据记录及分析** 在实验过程中,应记录每个步骤的结果,包括JSP源代码、...

    JSP商品详细信息页面

    在IT行业中,JSP(JavaServer Pages)是一种用于创建动态网页的技术,特别是在电子商务网站中,商品详细信息页面是至关重要的。这个"JSP商品详细信息页面"项目可能涉及到多个技术层面,包括前后端交互、数据库操作、...

    jsp超简单的数据库管理界面

    【标题解析】:“jsp超简单的数据库管理界面”这个标题表明我们将会探讨如何使用JSP(JavaServer Pages)技术创建一个简易的数据库管理界面。在Web开发中,JSP常用于动态网页的生成,通过结合HTML、CSS、JavaScript...

    JSP_vs_PHP

    通过SPECweb2005基准测试框架提供的多个应用场景,本文详细比较了PHP与JSP这两种服务器端脚本语言在性能上的差异。尽管PHP在解释执行方面存在一定的开销,但在实际应用中,这种开销对整体性能的影响相对较小。更重要...

    ASP、PHP、JSP网站平台的架设

    本文将详细介绍这三种技术的基本概念、所需软件配置、平台架设方法及其与MySQL数据库的连接方式,并对比它们的特点和适用场景。 #### 二、ASP、PHP、JSP、MYSQL简介 ##### 2.1 ASP (Active Server Page) ASP是一...

    Perl、PHP、ASP、JSP技术比较

    以下是对这些技术的详细比较: Perl,全称Practical Extraction and Report Language,最初广泛用于Web应用开发,因其类似C语言的语法和对文件操作的强大能力而受到青睐。然而,Perl的灵活性和过度冗余的语法导致...

    各类语言大马php,ASP.JSP,.NET,java

    通过Java Servlets和JavaBeans,JSP可以与Java后端紧密集成,提供高性能和安全的Web解决方案。 **.NET Framework** .NET是由微软开发的统一开发平台,支持多种语言,如C#、VB.NET、C++等。ASP.NET是.NET框架的一...

    PHP,JSP 作为服务器端脚本语言的性能比较外文翻译(可编辑).doc

    研究者们使用了SPECweb2005基准测试工具,该工具提供了在PHP和JSP中实现的三种应用情景,以便对比两者的性能。 1. SPECweb2005基准测试 SPECweb2005是一个标准的Web服务器性能基准,它模拟了三个典型的应用场景:...

    ASP、JSP、PHP 三种技术比较

    ASP、JSP、PHP 三种技术比较 在 Web 开发领域中,ASP、JSP 和 PHP 是三种常用的动态网页语言,每种技术都有其优缺点和特点,本文将对这三种技术进行比较,帮助开发者选择合适自己的技术。 一、ASP 技术 ASP 全名 ...

    asp-jsp-php之比较分析

    然而,CGI的主要缺点是每次请求都会启动新的进程,这可能导致性能下降和资源消耗过大。 2. ASP (Active Server Pages) ASP是微软开发的一种服务器端脚本环境,主要用于构建动态网页。它支持多种脚本语言,如...

    JSP、ASP、PHP共存同一服务器

    JSP的优势在于其与Java的强大功能结合,以及良好的可维护性和可扩展性。 2. **ASP(Active Server Pages)**: ASP是由微软开发的一种服务器端脚本环境,主要用VBScript或JScript编写,用于创建动态交互式网页。...

    性能测试报告模板_中文

    除了压力测试,可能还包括负载测试(检查系统在正常和预期高峰负载下的表现)、耐久测试(长时间运行以检测稳定性)和稳定性测试(验证系统能否长时间在高负载下稳定运行)。 4. **测试执行与结果分析** 详细记录...

    图片放大预览 效果 jsp

    7. **JSP与Java后端交互**:JSP可以通过`&lt;jsp:useBean&gt;`和`&lt;jsp:setProperty&gt;`等标签与Java后端进行数据交互。例如,从数据库获取图片信息,或者处理用户上传的图片。 综上所述,实现“图片放大预览效果”的核心...

    flex_与JSP性能比较分析

    ### Flex与JSP性能比较分析 #### 一、引言 随着互联网技术的快速发展,Web应用程序的用户体验变得越来越重要。为了提升用户体验同时保持良好的服务器性能,开发者常常需要在不同的技术栈间做出选择。本报告主要...

    JSP001基于JSP和JavaBea的图书管理系统(SQL数据库

    系统测试和安全性设计是指对系统的测试和安全性设计,包括系统的功能测试、安全性测试、性能测试等。系统测试和安全性设计是系统开发的关键步骤,它直接影响系统的可靠性和安全性。 知识点9:系统实现 系统实现是指...

    jsp模板测试工程

    《JSP与相关“所见即所得”模版的运行效率测试》这篇文章的附件,名为"TestJSPTemplate"的压缩包,显然包含了关于JSP(Java Server Pages)模板技术的测试代码和资源。JSP是Java平台上的一个动态网页技术,它允许...

    漂亮的jsp密码强度检测

    jsp密码强度检测jsp密码强度检测jsp密码强度检测

Global site tag (gtag.js) - Google Analytics