我知道在浏览器中,按照
for(var i=0, l=arr.length; i<l; i++){ }
代替
for(var i=0; i<arr.length; i++){ }
但是在NodeJS中是这样还是V8引擎优化了呢?
我知道 ecma-262 5.1 sec-15.4数组长度定义如下:
The value of the length property is numerically greater than the name of every property whose name is an array index; whenever a property of an Array object is created or changed, other properties are adjusted as necessary to maintain this invariant.
因此,如果长度不变,则此方法变慢的唯一原因是您必须访问该属性。我正在寻找的是一个合理的示例/解释,它可以显示 V8 引擎(在 NodeJS 中使用)在访问此属性时是否会受到性能影响。
请您参考如下方法:
如果 arr
是一个纯局部变量并且循环不以任何方式触及它,那么是的。然而,即使优化失败,由于 CPU 缓存的缘故,一遍又一遍地加载相同的字段实际上也不会花费任何成本。