JavaScript中对象/数组的性能如何?(专门针对Google V8)

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


慕后森
浏览 579回答 3
3回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript