如何优化JavaScript脚本的性能(4)
作者:海啸 来源:海啸的地盘 时间:2008-02-19 21:47:00
附录1
由于是以前做过的测试,测试代码已经不全,我补充了一部分如下:
var print;
if(typeof document != "undefined" ){
print = function(){
document.write(arguments[0]);
}
}else if(typeof WScript != "undefined" ){
print = function(){
WScript.Echo(arguments[0],arguments[1],arguments[2]);
}
}
function empty(){
}
function benchmark(f){
var i = 0;
var start = (new Date()).getTime();
while(i < pressure){
f(i++);
}
var end = (new Date()).getTime();
WScript.Echo(end-start);
}
/*
i=0
start = (new Date()).getTime();
while(i < 60000){
c = [i,i,i,i,i,i,i,i,i,i];
i++;
}
end = (new Date()).getTime();
WScript.Echo(end-start);
i=0
start = (new Date()).getTime();
while(i < 60000){
c = new Array(i,i,i,i,i,i,i,i,i,i);
i++;
}
var end = (new Date()).getTime();
WScript.Echo(end-start);
*/
function internCast(i){
return "" + i;
}
function StringCast(i){
return String(i)
}
function newStringCast(i){
return new String(i)
}
function toStringCast(i){
return i.toString();
}
function ParseInt(){
return parseInt(j);
}
function MathFloor(){
return Math.floor(j);
}
function Floor(){
return floor(j);
}
var pressure = 50000;
var a = "";
var floor = Math.floor;
j = 123.123;
print("-------------\nString Conversion Test");
print("The empty:", benchmark(empty));
print("intern:", benchmark(internCast));
print("String:");
benchmark(StringCast);
print("new String:");
benchmark(newStringCast);
print("toString:");
benchmark(toStringCast);
print("-------------\nFloat to Int Conversion Test");
print("parseInt");
benchmark(ParseInt);
print("Math.floor");
benchmark(MathFloor);
print("floor")
benchmark(Floor);
function newObject(){
return new Object();
}
function internObject(){
return {};
}
print("------------\nliteral Test");
print("runtime new object", benchmark(newObject));
print("literal object", benchmark(internObject));
附录2
for(var i=0;i<100;i++){
arr[i]=0;
}
代码2:
var i = 0;
while(i < 100){
arr[i++]=0;
}
代码3:
var i = 0;
while(i < 100){
arr[i]=0;
i++;
}
在firefox下测试这两段代码,结果是代码2优于代码1和3,而代码1一般优于代码3,有时会被代码3超过;而在IE 6.0下,测试压力较大的时候(如测试10000次以上)代码2和3则有时候优于代码1,有时候就会远远落后代码1,而在测试压力较小(如5000次),则代码2>代码3>代码1。
代码4:
var i = 0;
var a;
while(i < 100){
a = 0;
i++;
}
代码5:
var a;
for(var i=0;i<100;i++){
a = 0;
}
上面两段代码在Firefox和IE下测试结果都是性能接近的。
代码6:
var a;
var i=0;
while(i<100){
a=i;
i++;
}
代码7:
var a;
var i=0;
while(i<100){
a=i++;
}
代码8:
var a;
for(var i=0;i<100;i++){
a = i;
}
代码9:
var a;
for(var i=0;i<100;){
a = i++;
}
这四段代码在Firefox下6和8的性能接近,7和9的性能接近,而6, 8 < 7, 9;最后我们来看一下空循环
代码10:
for(var i=0;i<100;i++){ }
代码11:
var i;
while(i<100){ i++; }
最后的测试出现了神奇的结果,Firefox下代码10所花的时间与代码11所花的大约是24:1。所以它不具备参考价值,于是我没有放在一开始给大家看。
标签:JavaScript,优化,性能
0
投稿
猜你喜欢
鼠标经过超链时的提示图层源码
2010-03-17 20:51:00
当标题不能显示完整的时候
2007-11-20 13:23:00
IE与Firefox的CSS兼容大全
2008-01-31 15:36:00
FrontPage XP设计教程1——站点初建与管理
2008-10-11 12:13:00
[翻译]标记语言和样式手册 Chapter 8 再谈清单
2008-01-29 13:16:00
phpstudy apache开启ssi使用详解
2023-05-25 08:04:44
带你深入了解MySQL数据库系统参数的优化
2009-03-06 17:58:00
基于AJAX技术提高搜索引擎排名
2008-01-24 12:45:00
用Javascript正则表达式验证Email地址
2009-12-09 15:56:00
PHP对战ASP:这还值得讨论吗
2008-04-16 14:19:00
小结下dom节点操作
2011-03-08 10:33:00
实例讲解启动mysql server失败的解决方法
2008-12-26 17:27:00
如何以及何时使用sIFR
2008-03-07 12:38:00
SEO与“nofollow”及“external nofollow”
2007-12-15 09:31:00
计划备份mysql数据库
2009-03-09 14:34:00
图片变形扭曲特效js脚本
2008-11-20 12:57:00
AJAX无刷新验证用户名是否存在
2007-08-10 10:07:00
ASP实例:即时显示当前页面浏览人数
2008-04-19 22:02:00
[翻译]标记语言和样式手册 Chapter 16 下一步
2008-02-22 17:47:00
BOF、EOF 属性
2009-05-11 12:37:00