读大学时看到书上将asp ,jsp php列为网页三剑客. 当时觉得asp很酷,建设很简单,于是努力学习asp...
今天对asp终于很熟了,无聊想测一下这三剑客哪一个最厉害,速度最快.
大学里asp做的一些网站感觉速度很快,一点就开了,相反,毕业后工作用的J2EE架构的网站,点开要半天..老觉得jsp还不如asp.
至于php,也是跨平台的,三种语言中我最陌生的语言,同时也知道这语言是很强大的.安全性好,漏洞少.而且很多人说php比asp快很多.
那么php比起jsp,以及asp哪个快呢?靠点击网页凭直觉是感觉不出那种细微差别了。 正好我电脑上有三种语言运行的环境,亲自测试一下.
大概说下我的电脑, CPU是P4 2.4G 1G内存.winxp系统
asp的服务器是IIS6.0,jsp的服务器是Tomcat5.0 ,php服务器是php5.0(已整合到IIS里)
测试方法:将3.1415926开方300万次, 测试所花的时间。为什么是300万次呢,如果只开方一次,相信三种语言都能在瞬间完成(不到1毫秒),无法统计到所花的时间。
为减少误差, 每种语言测了三次 ,下面是测试结果:
asp 3.218 秒 3.203 秒 3.312 秒
php 0.648秒 0.661秒 0.629秒
jsp 0.062秒 0.047秒 0.063秒
真是让人大跌眼镜啊,asp运行的超慢,三秒的时间,而且浏览器还是不响应的状态,任务管理器显示CPU使用率到了100%
而jsp是最快的。。快到什么程度呢? 我把三百万次改成三千万次, 结果花的时间在0.5秒左右,比php和asp的三百万次都快,而且任务管理器里所显示的CPU占用率不到10% 。
再次加大,将jsp中的三千万次改成三亿次,这次jsp花了五秒时间,CPU显示占用率100%,至于另两种语言,还有必要试吗?也不敢试,别把CPU给计算坏了。。。哈哈
还是JAVA最强大啊。。。。至于上班做的这系统慢,主要还是运用了太多的中间件,而这些又是必要的,因为大大节省了开发成本和时间。
总的来讲,还是java最强,小小的分支jsp就这么厉害,而且我的服务器还是小猫TOMCAT,换成weblogic也许效果更好。。。
遗憾的是国内提供的虚拟主机支持jsp的真的太少了。。
真的该放弃asp了,慢还不说,漏洞也多。。微软自己的网站都不用这个了。
下面是三种语言测速度的源码:
asp(仍然是最简洁的,变量都不用声明,但是这些却是要付出代价的)
<%
stime=timer()
for i=1 to 3000000 '循环三百万次
c=sqr(3.1415926)
next
etime=timer()
Response.write etime-stime
%>
php实现CPU计算开方的速度测试源码:
function test_float()
{
$t = pi();
$timeStart = gettimeofday();
for($i = 0; $i < 3000000; $i++);
{
sqrt($t);
}
$timeEnd = gettimeofday();
$time = ($timeEnd["usec"]-$timeStart["usec"])/1000000+$timeEnd["sec"]-$timeStart["sec"];
$time = round($time, 3)."秒";
return $time;
}
jsp实现CPU计算速度测试的源码:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.lang.Math.*"%>
<%
java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("ssSSS");
java.util.Date currentTime = new java.util.Date();
String strd= formatter.format(currentTime);
int c=0;
double d=0;
Double startTime=Double.valueOf(strd);
for (int i=1; i<3000000;i++){
d=java.lang.Math.sqrt(3.1415926);
}
java.text.SimpleDateFormat formatter2 = new java.text.SimpleDateFormat("ssSSS"); //jsp取毫秒用SSSS,第一个S永远是0,故去掉
java.util.Date currentTime2 = new java.util.Date();
String strd2= formatter2.format(currentTime2);
Double endTime=Double.valueOf(strd2);
out.println(endTime-startTime); //这里得出的差值是毫秒
%>