A1:笑得海潮 B3:冒泡的崔 D2:Cornell University,Computer Vision Group H2:冰河的博客 G3:丕子博客 K1:MLA CHINA K4:斯坦福视觉实验室 L4:MIT 机器学习实验室
现在的位置: 首页技术>正文
cat_ico23 category
谈谈PHP,ASP,JSP,Python的速度,关于WEB应用
发表于852 天前 技术 评论数 3 ⁄ 被围观 824 次+

27关于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秒左右。
---------------------------------------------------------------------

现在InterNet 越来越成为生活中不可或缺的一部分,制作网页的动态语言也越来越多,主要流行的有以下几种,ASP,PHP 和 JSP,他们之间互有优缺点,笔者在工作实践中对他们作了一下比较浅显的比较。

ASP 由于其简单功能实用等方面受到广大朋友的喜欢,再加上MS的强有力支持,可以说是时下作站点最为流行的语言,他借助MS的Com+ 技术,几乎可以实现在C/S 能够实现的所有功能,可以说确实具有相当的竞争力。ASP的代码实现也很简单,MS 提供的InterDev 在RAD 的基础上,使Asp 的开发一夜之间火遍了大江南北。但是他的缺点是,由于MS 长久以来的霸道作风,他只能运行在MS 的平台上,因此在关键性的应用上使人难以轻易接受。

PHP 则市秉承Linux 的GNU( ) 风格,借助与源码公开,使他迅速成为世界上目前应用最为广泛的站点制作语言之一。借助与C++的形式,引用类的概念,使得代码的可重复性应用便的异常简单。加上他和Linux,Apache 和MySql 的紧密配合,关键性的应用也没有问题(有名的Sina就是采用Php)。但是他有一个比较大的麻烦,就是没有一个非常有实力的公司专门给他做支持,因此相关的学习资料比较少,目前在国内使用他的站点比较多,但是专门讲解他的站点就比较少。给初学者带来了很多的麻烦。

JSP 是Sun公司推出的新一代站点开发语言,他完全解决了目前ASP,PHP的一个通病--脚本级执行(据说PHP4 也已经在Zend的支持下,实现编译运行).Sun 公司借助自己在Java 上的不凡造诣,将Java 从Java 应用程序 和 Java Applet 之外,又有新的硕果,就是Jsp--Java Server Page。Jsp 可以在Serverlet和JavaBean的支持下,完成功能强大的站点程序。

Apache.org Apache是开放的源代码的web server,占有78%,其对手为如IIS占15%
一般装在UNIX 或LINUX平台

我在实际工作中,就这三种语言的性能进行了比较
首先进行的是循环性能测试

首先测试的是Jsp
测试采用 20000*20000 次循环运算(有没有搞错,这么多),测试结果另人不可思议,该程序只用了不到 4 秒的时间就运行结束了。(没有搞错吧),程序代码如下
<jsp:useBean id=clock scope=page.JspCalendar type="dates.JspCalendar"/>
<jsp:getProperty name="clock" property="time" />
<%
int i=0;
int j=0;
int k=0;
for(i=0;i<20000;i++){
for(j=0;j<20000;j++){

}
}
%>
<jsp:useBean id=clock1 scope=page.JspCalendar type="dates.JspCalendar"/>
<jsp:getProperty name="clock1" property="time" />
下一步测试的是 PHP,最初也准备测试 20000*20000次,但是不管把程序最大运行时间调的再大,也无法运行结束,因此改为 2000*2000 ,运行时间竟然达到 84 秒,程序代码如下
<?
$TTime=date("Y-n-d"). " " . date("H:i:s");
echo $TTime;
echo "
";
for($i=0;$i<1000;$i++){
for($j=0;$j<1000;$j++){
}
}
$TTime=date("Y-n-d"). " " . date("H:i:s");
echo $TTime;
?>

最后进行的是Asp 的测试,测试的循环也是 2000*2000(几个0可要看清楚),运行时间是 63 秒,程序代码如下:
<%
response.write now
response.write "
"
for i=0 to 2000
for j=0 to 2000
next
next
response.write now
%>
另外,我也对 数据库连接作了测试,由于Jsp 在连接数据库时需要通过 JDBC,因此必须专门为此作一个连接数据库的JavaBean,为了简单起见,我只把测试结果写出来,想要代码的朋友,和我联系!
对 Oracle 8 进行 1000 次 Insert,Update,Select,和Delete
Jsp 需要 13 秒
Php 需要 69 秒
ASP 需要 73 秒

大家好,我以前曾经写过一篇 几种动态编程语言的 比较的文章(具体情况请
看:继续访问 取消访问','','','','a_alt_link','','',0,'',0,-1314,'',event);return false;" href="http://www.asp888.net/lanmu/viewarticle.asp?id=17),当时对" target=_blank>http://www.asp888.net/lanmu/viewarticle.asp?id=17),当时对 asp 的评分很低,因为当时的jsp 确实太好了,还没有一种技术在当时能赶得上jsp,现在 MS 推出的 .net 战略,以及相应的asp.net(就是asp+),改变了这种情况
关于 asp+ 的其他的问题,豆腐的站点上已经写了很多的 文章了,我就在这里来再次比较一下
程序的运行速度的问题,请看程序
<%
Dim intStart,intStop As DateTime
Dim timeUse As TimeSpan
dim Sum,i,j as int32
intStart = DateTime.Now
for i=1 to 20000
for j=1 to 20000
Sum=Sum + i
next
next
intStop = DateTime.Now
timeUse = intStop.Subtract(intStart)
Response.Write (TimeSpan.ToString(timeUse))
%>
请看输出:是 3。6 秒左右,老天,速度真的是好快呀,达到了jsp 同等的运行效果,因为他们同样采用了 预编译(preCompile)的原因,怎么样,Cool 吧!
---------------------------------------------------------------------------------------

 

刚刚在9月编程语言排行榜上取得历史性突破的PHP在Web开发领域最到的对手可能就是基于微软.NET技术的ASP.NET。近日,微软的Joe Stagner在博客上发表了一系列文章比较了PHP和ASP.NET性能方面的文章,引起了来自双方程序员的大量回应。Joe表示,他会将这样的测试持续下去,并寻求更为合适的方式,以获得对实际项目来说尽可能有参考价值的结论。

Joe在博客中称,一般来说,作性能测试的目的是要尝试证明一方比令一方要快。我受雇于微软,同时编写PHP和ASP.NET代码。我在.NET出现之前就在使用PHP,两个东西我都很喜欢。

所以,我很难说出哪个更好。当我说PHP好话时,我的微软同事们会写信来批评我,而当我发表倾向于ASP.NET的言论时,我的PHP朋友们会说我是微软的托。

我进行这个测试是因为每个人都对PHP的性能有自己的看法(Windows vs. Linux & 5.2 vs. 5.3),却没人能给出明确的数据。

ASP.NET比拼PHP的测试环境如下:

◆所有的测试都在同一台机器上运行(拥有4G内存和60G 7200转硬盘的Toshiba Tecra M5)。

◆Ubuntu 9和Windows Server 2008标准版分别安装于独立(但相同)的硬盘中。

◆Linux使用Apache2,Windows使用IIS 7作为各自的Web服务器。

◆双方的操作系统都进行了完整的patch或升级。

◆双方的系统和运行时都没有进行额外的性能增强。

从实验结果上看,PHP在Linux和Windows的执行性能各有千秋:

◆纯粹的语句执行在Windows上表现更好。

◆函数调用在Windows上更快。

◆对象的创建和访问,对于PHP 5.2来说在Linux上更快,但是对于PHP 5.3来说则是Windows更快。

◆类库调用在Linux上快得多(如在Ubuntu上进行加密要比Windows要快3到5倍)。

Linux与Windows平台对比

在Linux上访问文件性能略高于Windows,不过Windows上文件复制的性能要比Linux慢60%,可能是ACL高级安全的缘故。

在Linux上访问MySQL要比Windows快不少,而且在Windows上运行PHP 5.3的情况则更为恶劣(不过从下面PostgreSQL的情况上来看,这应该是糟糕实现的缘故)。

PostgreSQL在两个平台上的性能非常接近(1000个操作的差距在0.06秒之内)——无论是PHP 5.3还是PHP 5.2,Windows上表现都略胜一筹。

Windows上PHP 5.2访问MS SQL Server的性能稍逊于在Linux上访问MySQL(此时还没有面向PHP 5.3的SQL Server支持)。

对于纯粹的PHP执行性能来说,Linux和Windows相差无几,这不会成为选择Linux或Windows作为部署平台的决定性因素。如果你在构建一个应用程序,那么PostgreSQL可能是更好的选择。因为它在两个平台上的表现都很优秀。

如果你的应用程序必须使用MySQL,那么选择Windows就需要早些计划扩展性问题了(个人认为Sun不太可能为Windows优化MySQL的性能)。

PHP的第一个版本的SQL Server驱动程序要比MySQL或PostpreSQL要慢一些,但这应该不会成为问题。第二个版本的驱动器正在开发之中,它会带来性能提升。

在Joe看来,全面来看,PHP和IIS团队在执行性能上已经做的非常成功,接下来就需要各开源程序的团队(Drupal、WordPress、Joomla等等)为各平台进行性能优化了。

不过,除了文件复制操作之外,ASP.NET在性能方面全面领先于PHP(无论部署在Linux还是Windows上面):

Linux上访问MySQL的性能稍稍优于Windows上访问SQL Server的性能(使用普通的数据类型和SELECT语句)。但是这里的差距几乎可以忽略不计。

ASP.NET(C#)操作,如对象使用,类库调用等等,其性能都远高于PHP。对于这个测试结果,Joe补充道:

 
   
 
作者:oojinnoo
2009-9-30 22:32 回复此发言 
 

2 ASP.NET比拼PHP,谁是速度之王?
   

我知道我的一些PHP朋友和Linux伙计们要跳出来驳斥我的测试和结果了。

我一直在思考,这样的性能比较是否需要加入一些高级的优化选项。不过.NET方面也有例如多线程,异步请求,和各种缓存方式可以使用

请注意——我并没有说“ASP.NET更快,所以你不应该使用PHP!”,我使用认为,PHP过于简单导致对某些高级应用来说有些举步维艰,就像ASP.NET在项目早期会有学习方面的复杂性。

对我来说,PHP最令人兴奋的地方不是它的语言/平台,而是成千上万聪明的PHP开发人员,以及各种优秀的项目(如Drupal、Joomla、WordPress、PHPBB、Nuke等等)。

可以这么认为,PHP在Windows和Linux上的性能处于同一个水平上,我现在终于可以为Windows编写那些我盼望着许多年的PHP类库了。

Joe还公开了测试代码。他表示,如果你对这个测试的结果有疑义,可以亲自进行这个实验,或是编写你自己的测试代码进行试验。

文章发布之后,许多网友对这一测试结果发表了看法。Joe基本上逐一回复了其中的主要观点:

“我使用ASP.NET只是因为我喜欢Visual Studio IDE”——我个人认为Visual Studio是最有生产力的开发工具。但是,PHP的有不错的选择。我使用Zend Studio,PHPEd,Komodo,Delphi for PHP,这些都很不错。我讨厌Eclipse,不过Zend也在这方面为PHP开发做了不少扩展。

应该比较ASP的性能——不用了,谢谢。旧式的ASP与目前的PHP与ASP.NET差距太大了。做这种比较,似乎是在建议使用ASP开发新项目,我强烈不建议你这么做。

32位与64位系统对比

32位与64位系统之间的比较——这些测试的目的并不是为了体现64位系统上的性能差距。今后的测试我会增加64位的场景。

“PHP丑陋至极”——哦,我不同意。旧式ASP要丑陋多了。你可以写出非常可怕而丑陋的PHP代码,也可以写出丑陋而可怕的C#或VB代码。同样,你也可以写出优雅的C++样式的PHP。这完全只和开发人员的技能有关。

应该使用Windows上的Apache进行测试——Apache是Linux上的服务器,不过我认为如果你在Windows上不使用IIS 7则会损失太多太多东西了。

“有办法在Win2K8中,在不损失安全性的前提下加快文件复制性能吗?”——似乎不行。我认为这涉及到Windows服务器上的ACL系统。我以后可能会测试通过数据流读取文件的性能,有些东西的性能可能会有所改善。不过,Web应用程序一般不会编程来复制大量文件。

“PHP一直是,也永远只是一个半专业性质的环境”——这种说法狗屁不通。PHP平台上有许多专业的,高质量的应用程序,也有很多我非常尊敬的开发人员。是否专业是开发人员的问题,不是PHP或ASP.NET的问题。

“我认为比较没有opcode缓存的PHP很不公平,.NET是编译执行的,而PHP需要每次都解释并‘编译’页面”——我同意这个测试可能不够完整,但是我不认同这个逻辑。我测试PHP的方式,就和下载安装的方式一样。我的虚拟主机也没有安装op-code缓存。而事实上,ASP.NET自带这个特性也并不意味着测试是不公平的,这是因为PHP缺少这个特性——不过这个要求很合理,我正在准备新的测试。

“说PHP不是一个‘专业的’语言很没道理,因为几乎所有最大的站点都是用PHP构建的”——这种说法是没道理,不过说那些站点“几乎都是”用PHP构建的也是错误的。有些是,有些不是。

如果你们看到这一数据之后对ASP.NET信心倍增我自然很高兴。如果我不认为.NET是开发Web应用程序来说是一种更好的选择——至少不属于其它平台,那么我也不会在微软工作了。

但是……如果你因为这些数据而忽视PHP,也是错误且幼稚的行为。

从纯技术角度来说,我认为.NET远比PHP强大,但这并不意味着PHP不够强大。在我看来,PHP的力量体现在众多的应用程序以及可用的框架。

大约一周以后,Joe公开了第二次测试的结果。与前一个测试相比,第二个测试主要有以下两个改变:

为Linux和Windows上安装了op-code缓存,并重新运行了大部分测试。

由于一些依赖项的问题,PHP 5.3 + APC的测试平台变成了Debain 5操作系统。

对于第二次测试及其结果,Joe解释到:

从结果上看,Ubuntu和Debian上运行PHP的性能差距可以忽略不计。部分条目的性能有些细小的改进,有些则有25%的提高,但是总体来说其效果比我想象中要来得低。

使用APC之后,一些条目的运行反而变慢了,不过我认为这只是机器所造成的误差。请注意,表格中显示的不是第一次的结果,都是经过两次刷新,确认是在缓存命中时得到的结果。

我认为现在的测试非常公平。

空的循环测试和空的函数执行非常重要,因为这反映了语言或平台的基础消耗。这是处页面传输等性能开销外的性能消耗,是一个重要的考虑方面。

我的一些PHP朋友也认可这个测试的准确性,不过给出了非常有见解的补充:

ASP.NET在性能上的领先不会对我有什么影响。PHP是我的最爱,我的应用程序已经足够快了。没错,ASP.NET在基础性能上是比较快,但是我的应用程序可以通过优秀的页面实现和JavaScript实践把这部分性能补回来。

此外,根据上一次实验的结果,在Windows平台上运行PHP时,在MySQL和文件的访问上有一些性能问题,微软许多团队都向我获取了相关信息。希望这些数据都够转变为切实的改进。

Joe表示,他将收集大家认为更公平,更有意义的测试场景。以下是他所计划的测试项目:

◆实际页面测试:循环,寒暑调用和对象操作是一类测试,不过页面的整体呈现则是另一种有意义的测试。

◆负载测试:哪一个环境可以同时处理更大量的请求。

◆在负载测试中,哪一方的性能会下降地更快。

◆在各种情况下,64位平台的表现如何。

国内也曾经进行过PHP在Linux和Windows平台上的性能测试。InfoQ曾经报道过微软在WordCamp China 2009大会上公开了之前与康盛创想合作进行的性能评估结果:在Windows Server 2008 + IIS上运行PHP,从平均相应时间,每秒处理的请求数,以及数据吞吐量等多方便均优于Linux + Apache的托管方式。 

 

--------------------------------------------------------------------

个人也用过Python的Django框架开发过,实话说,效率不经过优化,确实不敢恭维。

django ORM的效率确实很低下,我们一般采取下面的方式来优化:

1、使用memcached缓存数据
2、使用select_related将关联表数据1次取出(要根据实际应用来)
3、使用django的only、defer方法,只取需要的字段
4、尽量避免使用in查询(mysql中in查询效果很低,不清楚其它数据库是否一样)
5、保存数据时,只更新修改的字段(django是默认保存所有字段),参阅:http://code.djangoproject.com/
ticket/4102
6、打印SQL日志,根据具体功能逻辑来优化
7、尽量不要在filter结果集后,又使用get去取,这样每次get都会去数据库查询,可以将结果集先存为字典
8、使用数据库连接池

谈谈PHP,ASP,JSP,Python的速度,关于WEB应用:目前有3 条留言

  1. 流年 : 2010年07月14日10:16 下午 回复

    好长好长,而且JSP和ASP都没看过,所以就……

    • 丕子 : 2010年07月14日10:29 下午 回复

      这是我选语言的时候网上总结的

  2. 江湖大虾仁 : 2010年11月05日10:05 下午 回复

    原创?我刚才本地PHP测试了下1W*1W,12.6972358227s,还不至于无法执行完吧

给我留言


/ 快捷键:Ctrl+Enter

无觅相关文章插件,快速提升流量

不想听你唠叨×