javascript - javascript 中的属性与常量访问

标签 javascript performance

我正在研究面向高性能的 Web 组件,我怀疑是否值得在多次访问之前将对象属性的值分配给常量。

我的意思是转动这个:

let counter = 0;
for (let i = 0, len = parentObject.myObject.items.length; i < len; i++) {
    // items is an array of integers
    counter += parentObject.myObject.items[i] ;
}

进入这个:

let counter = 0;
const { myObject } = parentObject;
const { items } = myObject;
for (let i = 0, len =items.length; i < len; i++) { 
    counter += items[i] ;
}

在 Python 中,此更改会对性能产生积极影响。然而,我所做的测试(代码在 https://gist.github.com/Edorka/fbfb0778c859d8f518f0508414d3e6a2 )显示没有区别:

caseA total 124999750000
Execution time (hr): 0s 1.88101ms
caseB total 124999750000
Execution time (hr): 0s 1.117547ms

我怀疑我的测试是否有误,或者 VM 是否针对这种情况进行了任何我不知道的优化。

更新:根据@George Jempty 的建议,我在 https://jsperf.com/attribute-vs-constants 对 JSPerf 进行了快速调整。但结果一直很不稳定。

最佳答案

嵌套属性访问是 JavaScript 中最常执行的操作之一。您可以预期它会得到大量优化。

的确,V8 引擎 caches对象属性,因此手动缓存的性能优势可以忽略不计。

Live demo on jsperf.com

no difference

结论:不用担心!

关于javascript - javascript 中的属性与常量访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58933886/

相关文章:

javascript - KineticJS 与可重复鼠标事件的问题

sql - 有没有办法一致地确定两个存储过程中哪一个更快?

performance - 延迟、带宽和吞吐量之间有什么区别?

c - LR Controller 上的 "Error -- memory violation : Exception ACCESS_VIOLATION received"

javascript - 右键单击并从上下文菜单访问功能后如何获取链接的 DOM?

javascript - 转换 ol.geom.Geometry 的布局

javascript - 如何发出 NodeJS 请求并将其通过管道传递给另一个响应

java - 集群生产服务器中的性能问题

c++ - C++ 优先级队列中的运算符重载或比较函数

javascript - 如果 Web 浏览器用户修改 Javascript 并执行它(例如从控制台),是否违反同源策略?