本文讲述了JavaScript提升性能的常用技巧。分享给大家供大家参考,具体如下:
1.注意作用域
随着作用域链中的作用域数量的增加,访问当前作用域以外的变量的时间也在增加.访问全局变量总是要比访问局部变量慢,因为要遍历作用域链.
1). 避免全局查找 将在一个函数中会多次用到的全局对象存储为局部变量总是没错的.
2). 避免 with 语句 with会创建自己的作用域,因此会增加其中执行代码的作用域链的长度.
2.选择正确的方法
性能问题的一部分是和用于解决问题的算法或者方法有关的.
1). 避免不必要的属性查找
在计算机科学中,算法的复杂度是使用O符号来表示的.最简单,最快捷的算法是常数值,即O(1).之后,算法变得越来越复杂并花更长时间执行.常用的JavaScript算法类型有:
常数 : 不管有多少值,执行的时间都是恒定的.一般表示简单值和存储在变量的值.
对数 : 总的执行时间和值的数量相关,但是要完成算法并不一定要获取每个值. 例如:二分查找
线性 : 总执行时间和值的数量直接相关. 例如 :遍历某个数组中的所有元素
平方 : 总执行时间和值的数量有关,每个值至少要获取n次.例如:插入排序
立方: 总执行时间和值的数量有关,每个值至少要获取n的平方次
使用变量和数组要比访问对象上的属性更有效率.对象上的任何属性的查找都要比访问变量或者数组花更长时间,因为必须在原型链中对拥有该名称的属性进行一次搜索.
一般来讲,只要能减少算法的复杂度,就要尽可能减少.尽可能多地使用局部变量将属性查找替换为值查找.进一步讲,如果即可以用数字化的数组位置进行访问,也可以使用命名属性(诸如NodeList对象),那么使用数组位置.
2). 优化循环
a. 减值迭代 在很多情况下,从最大值开始,在循环中不断减值的迭代器更加高效.
b. 简化终止条件 由于每次循环过程都会计算终止条件,所以必须保证它尽可能快.
c. 简化循环体 循环体是执行最多的,所以要确保其被最大限度地优化.确保没有某些可以被很容易移出循环的密集计算.
d. 使用后测试循环 最常用的for循环和while循环都是前测试循环.而如do-while这种后测试循环,可以避免最初终止条件的计算,因此更快.
3). 展开循环 当循环的次数是确定的,消除循环并使用多次函数调用往往更快.如著名的Duff装置
4). 避免双重解释
当JavaScript 代码想解析 JavaScript 的时候就会存在双重解释的惩罚.如下例:
eval("alert('Hello world!')");//某些代码求值
修正:
新闻热点
疑难解答
图片精选