如何优化JavaScript脚本的性能总结 直接拿手头现成的东西比较快,如局部变量比全局变量快,直接量比运行时构造对象快等等。 尽可能少地减少执行次数,比如先缓存需要多次查询的。 尽可能使用语言内置的功能,比如串链接。 尽可能使用系统提供的API,因为这些API是编译好的二进制代码,执行效率很高 同时,一些基本的算法上的优化,同样可以用在JavaScript中,比如运算结构的调整,这里就不再赘述了。但是由于JavaScript是解释型的,一般不会在运行时对字节码进行优化,所以这些优化仍然是很重要的。 当然,其实这里的一些技巧同样使用在其他的一些解释型语言中,大家也可以进行参考。 参考 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)); 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; } 代码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监听改善站内消息系统 更多相关文章
|
推荐文章
精彩文章
|