网络编程
位置:首页>> 网络编程>> JavaScript>> 如何优化JavaScript脚本的性能(4)

如何优化JavaScript脚本的性能(4)

作者:海啸 来源:海啸的地盘 发布时间:2008-02-19 21:47:00 

标签:JavaScript,优化,性能

附录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。所以它不具备参考价值,于是我没有放在一开始给大家看。

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com