JavaScript性能优化
语言层次方面
1.循环
for (;;)
while ()
// for(;;)和while循环的性能应该说基本(平时使用时)等价
// 如果是循环变量递增或递减,不要单独对循环变量赋值,应该在它最后一次读取的时候使用嵌套的++或—操作符。
// 如果要与数组的长度作比较,应该事先把数组的length属性放入一个局部变量中,减少查询次数。(即下文的‘减少对象查找’)
for (in) // 效率极差,因为需查询散列键,尽量少用
倒序循环
达夫设备
2.局部变量和全局变量
局部变量的速度要比全局变量的访问速度更快,因为全局变量其实是全局对象的成员,而局部变量是放在函数的栈当中的。
3.减少对象查找
因为JavaScript的解释性,所以a.b.c.d.e,需要进行至少4次查询操作,先检查a再检查a中的b,再检查b中的c,如此往下。应该尽量少出现这样的表达式,可利用局部变量,把它放入一个临时的地方进行查询。
4.类型转换
浮点数转换成整型:这个更容易出错,很多人喜欢使用parseInt(),其实parseInt()是用于将字符串转换成数字,而不是浮点数和整型之间的转换,我们应该使用Math.floor()或者Math.round()。
另外,上面对象查找中的问题不一样,Math是内部对象,所以Math.floor()其实并没有多少查询方法和调用的时间,速度是最快的。
5.使用直接量
影响较小,可忽略。栗子:
var arr1 = [param1,param2,param3];// 直接量,引擎直接解释,较快
var arr2 = new Array(param1,param2,param3); // 要调用一个Array内部构造器
6.文件优化
文件优化也是一个很有效的手段,删除所有的空格和注释,把代码放入一行内,可以加快下载的速度,注意,是下载的速度而不是解析的速度,如果是本地,注释和空格并不会影响解释和执行速度。
其实这些经验都基于几条原则:
* 直接拿手头现成的东西比较快,如局部变量比全局变量快,直接量比运行时构造对象快等等。
* 尽可能少地减少执行次数,比如先缓存需要多次查询的。
* 尽可能使用语言内置的功能,比如串链接。
* 尽可能使用系统提供的API,因为这些API是编译好的二进制代码,执行效率很高