与 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 ......还不错。