如何优化js代码(4)――减少作用域链上的查找次数
2013-06-14 15:06
411 查看
4、减少作用域链上的查找次数
我们知道,js代码在执行的时候,如果需要访问一个变量或者一个函数的时候,它需要遍历当前执行环境的作用域链,而遍历是从这个作用域链的前端一级一级的向后遍历,直到全局执行环境,所以这里往往会出现一个情况,那就是如果我们需要经常访问全局环境的变量对象的时候,我们每次都必须在当前作用域链上一级一级的遍历,这显然是比较耗时的,我们看下面的例子:?
?
上面代码中,第二种情况是先把全局对象的变量放到函数里面先保存下来,然后直接访问这个变量,而第一种情况是每次都遍历作用域链,直到全局环境,我们看到第二种情况实际上只遍历了一次,而第一种情况却是每次都遍历了,所以我们看看其执行结果:
从上表中可以看出,其在IE6下差别还是非常明显的,而且这种差别在多级作用域链和多个全局变量的情况下还会表现的非常明显。
我们知道,js代码在执行的时候,如果需要访问一个变量或者一个函数的时候,它需要遍历当前执行环境的作用域链,而遍历是从这个作用域链的前端一级一级的向后遍历,直到全局执行环境,所以这里往往会出现一个情况,那就是如果我们需要经常访问全局环境的变量对象的时候,我们每次都必须在当前作用域链上一级一级的遍历,这显然是比较耗时的,我们看下面的例子:?
IE6.0 | ||||||
函数 | 第1次 | 第2次 | 第3次 | 第4次 | 第5次 | 平均 |
func1 | 1627ms | 1627ms | 1642ms | 1627ms | 1626ms | 1629.8ms |
func2 | 985ms | 1002ms | 1001ms | 985ms | 985ms | 991.6ms |
Firefox4.0 | ||||||
函数 | 第1次 | 第2次 | 第3次 | 第4次 | 第5次 | 平均 |
func1 | 72ms | 71ms | 72ms | 72ms | 82ms | 73.8ms |
func2 | 72ms | 71ms | 73ms | 83ms | 70ms | 73.8ms |
Chrome6.0 | ||||||
函数 | 第1次 | 第2次 | 第3次 | 第4次 | 第5次 | 平均 |
func1 | 62ms | 71ms | 63ms | 78ms | 78ms | 70.4ms |
func2 | 78ms | 62ms | 62ms | 71ms | 62ms | 67ms |
相关文章推荐
- 如何优化js代码(3)――减少页面的重绘
- 常见对象_在大串中查找小串出现的次数案例代码优化
- 优化Python代码使其加快作用域内的查找
- 如何优化你的JS脚本来减少reflow/repaint?
- 优化网站设计(九):减少DNS查找的次数
- React Native之如何优化组件来达到减少代码冗余
- 一道题目理解js中变量在作用域链与原型链中的查找顺序
- JS代码优化技巧之通俗版(减少js体积)
- 如何优化你的JS代码
- 如何优化你的JS代码
- 如何优化js代码(5)――避免双重解释
- 前端性能优化--合并压缩js,减少http请求次数
- 优化网站设计(九):减少DNS查找的次数
- 优化网站设计(九):减少DNS查找的次数
- 作用域 - JS解析器如何解析JS代码3
- 如何看js或者java的执行时间(查找导致加载慢的代码)
- 作用域 - JS解析器如何解析js代码?
- JS代码优化技巧之通俗版(减少js体积)
- node.js的作用、回调、同步异步代码、事件循环
- 当JS对象属性点后面的属性想用变量表示时代码该如何写