资讯专栏INFORMATION COLUMN

JavaScript的标识符解析性能

caspar / 2284人阅读

摘要:在执行环境的作用域链扯到作用域链就一定会扯到闭包问题,以后有空再仔细聊聊闭包中,一个标识符所在的位置越深,它的读写速度也就越慢。搜索该对象的过程必须要遍历整个作用域链,直到最后在全局变量对象中找到。这样就产生了更大的性能开销。

(条友们如果觉得我写的不错点击上面关注我一下吧,小编会有更加精彩的技术文章)

标识符(通常指命名)的解析是有代价的,实际上没有那种计算机操作可以不产生性能开销。在执行环境的作用域链(扯到作用域链就一定会扯到闭包问题,以后有空再仔细聊聊闭包)中,一个标识符所在的位置越深,它的读写速度也就越慢。也就是说函数中读写局部变量总是最快的,而读写全局变量总是最慢的。因为全局变量总是在执行环境作用域的末端。所以这就是我们常在某些书上或者老师给我们说尽量少使用全局变量的原因之一。

综上所述,在没有优化的JavaScript引擎的浏览器中,建议尽可能的少使用全局变量。这里有一个重要的原则:如果某个跨作用域的值(下面例子用document)在某个函数中被引用了二次或多次以上,那么就应该把它存储在局部变量之中。

考虑下面的例子:

bad的例子

上面的函数引用了三次document,而document是个全局对象。搜索该对象的过程必须要遍历整个作用域链,直到最后在全局变量对象中找到。这样就产生了更大的性能开销。

下面看看这样重写的函数:

Good的例子

Fun1函数首先将document对象的引用存储在局部变量doc中,这样就访问全局变量的次数就减少到了一次。由于doc是个局部变量,因此通过它访问document会更快。当然了,就这一个函数你也许感受不到性能上的提升。但可以想象一下一个大型项目中当有几十个或者上百个全部变量被反复访问的时候,那么性能上的提升一定是显著的。
本文由甲爪日付广告联盟(www.jiazhua.com)整理编辑!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/82930.html

相关文章

  • JavaScript优化之管理作用域

    摘要:当被创建时,它的作用域链初始化为当前运行函数的属性中的对象,这些值按照他们出现在函数中的顺序,被复制到执行环境的作用域链中。然后这个对象被推入作用域链最前端。 在计算机科学中,数据存储的位置关系到代码执行过程中数据的检索速度,有一个经典的问题即为:通过改变数据的存储位置来获得最佳的读写性能。 Javascript中四种基本的数据存储位置 字面量字面量只代表自身,不存储在特定的位置。...

    fox_soyoung 评论0 收藏0
  • 性能JavaScript阅读简记(一)

    摘要:对于直接量和局部变量的访问性能差异微不足道,性能消耗代价高一些的是全局变量数组项对象成员。当一个函数被创建后,作用域链中被放入可访问的对象。同样会改变作用域链,带来性能问题。 早前阅读高性能JavaScript一书所做笔记。 一、Loading and Execution 加载和运行 从加载和运行角度优化,源于JavaScript运行会阻塞UI更新,JavaScript脚本的下载、解析...

    sorra 评论0 收藏0
  • 性能JavaScript阅读简记(一)

    摘要:对于直接量和局部变量的访问性能差异微不足道,性能消耗代价高一些的是全局变量数组项对象成员。当一个函数被创建后,作用域链中被放入可访问的对象。同样会改变作用域链,带来性能问题。 早前阅读高性能JavaScript一书所做笔记。 一、Loading and Execution 加载和运行 从加载和运行角度优化,源于JavaScript运行会阻塞UI更新,JavaScript脚本的下载、解析...

    zhangrxiang 评论0 收藏0
  • JavaScript 作用域学习笔记

    摘要:每一个运行期上下文都和一个作用域链关联。这个对象将被推入作用域链的头部,这意味着函数的所有局部变量现在处于第二个作用域链对象中,因此访问代价更高了。在代码块内部,函数的所有局部变量将会被放在第二个作用域链对象中。 参考: Javascript作用域原理 理解 JavaScript 作用域和作用域链 JavaScript 作用域 作用域就是变量与函数的可访问范围,即作用域控制着变量与函数...

    赵连江 评论0 收藏0
  • 《高性能javascript》阅读摘要

    摘要:当执行上下文被创建时,它的作用域链初始化为当前运行函数的属性中的对象。该过程搜索执行环境的作用域链,查找同名的标识符。搜索实例成员比从字面量或局部变量中读取数据代价更高,再加上遍历原型链带来的开销,这让性能问题更为严重。 最近在阅读这本Nicholas C.Zakas(javascript高级程序设计作者)写的最佳实践、性能优化类的书。记录下主要知识。 加载和执行 脚本位置 放在中的...

    duan199226 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<