Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->网站设计 ->JavaScript ->正文

如何优化JavaScript脚本的性能

来源:Linuxdby.com 作者:Webmaster 时间:2007-06-05 点击: [收藏] [投稿]

总结
本文总结了我在JavaScript编程中所找到的提高JavaScript运行性能的一些方法,其实这些经验都基于几条原则:

直接拿手头现成的东西比较快,如局部变量比全局变量快,直接量比运行时构造对象快等等。

尽可能少地减少执行次数,比如先缓存需要多次查询的。

尽可能使用语言内置的功能,比如串链接。

尽可能使用系统提供的API,因为这些API是编译好的二进制代码,执行效率很高

同时,一些基本的算法上的优化,同样可以用在JavaScript中,比如运算结构的调整,这里就不再赘述了。但是由于JavaScript是解释型的,一般不会在运行时对字节码进行优化,所以这些优化仍然是很重要的。

当然,其实这里的一些技巧同样使用在其他的一些解释型语言中,大家也可以进行参考。

参考
http://www.umsu.de/jsperf/ 各种浏览器的测试对比

http://home.earthlink.net/~kendrasg/info/js_opt/

附录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=0start = (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=0start = (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
代码1:

    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++;    }

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:js技巧收集(200多个)   下一篇:用xmlhttp和Java session监听改善站内消息系统

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号