对象/数组在 JavaScript 中的性能如何?(专门针对谷歌V8)
与JavaScript(特别是Google V8)中的数组和对象相关的性能将非常有趣。我在互联网上的任何地方都找不到关于这个主题的全面文章。
我知道有些对象使用类作为其底层数据结构。如果有很多属性,它有时被视为哈希表?
我也明白数组有时被视为C++数组(即快速随机索引,缓慢删除和调整大小)。而且,其他时候,它们更像对象(快速索引,快速插入/删除,更多内存)。而且,有时它们可能存储为链接列表(即缓慢的随机索引,在开头/结尾快速删除/插入)
JavaScript 中数组/对象检索和操作的精确性能如何?(专门针对谷歌V8)
更具体地说,它对性能的影响:
- 向对象添加属性
- 从对象中删除属性
- 为对象中的属性编制索引
- 将项添加到数组
- 从数组中删除项目
- 为数组中的项目编制索引
- Calling Array.pop()
- 调用 Array.push()
- 调用 Array.shift()
- Calling 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...没那么糟糕。