与JavaScript(特别是Google V8)中的数组和对象相关的性能非常有趣。我在Internet上的任何地方都找不到有关此主题的详尽文章。
我了解某些对象使用类作为其基础数据结构。如果有很多属性,有时将其视为哈希表?
我也了解有时将数组像C ++数组一样对待(即快速随机索引,缓慢删除和调整大小)。而且,有时将它们更像对象(快速索引,快速插入/删除,更多内存)。而且,也许有时它们以链接列表的形式存储(即慢速随机索引,开始/结尾处的快速删除/插入)
JavaScript中数组/对象检索和操作的精确性能是什么?(专门针对Google V8)
更具体地说,它对性能的影响:
- 向对象添加属性
- 从对象删除属性
- 索引对象中的属性
- 将项目添加到数组
- 从阵列中删除项目
- 索引数组中的项目
- 调用Array.pop()
- 调用Array.push()
- 调用Array.shift()
- 调用Array.unshift()
- 调用Array.slice()
任何文章或更多细节的链接也将不胜感激。:)
编辑:我真的很想知道JavaScript数组和对象如何在后台工作。另外,在什么情况下 V8引擎“知道”要“切换”到另一个数据结构?
例如,假设我用...创建一个数组
var arr = [];
arr[10000000] = 20;
arr.push(21);
这到底是怎么回事?
还是...这呢... ???
var arr = [];
//Add lots of items
for(var i = 0; i < 1000000; i++)
arr[i] = Math.random();
//Now I use it like a queue...
for(var i = 0; i < arr.length; i++)
{
var item = arr[i].shift();
//Do something with item...
}
对于常规阵列,性能将很糟糕。相反,如果使用了LinkedList……还不错。