相关疑难解决方法(0)

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

与JavaScript中的数组和对象(尤其是Google V8)相关的性能对于文档来说非常有趣.我在互联网上找不到关于这个主题的综合文章.

我知道一些对象使用类作为它的底层数据结构.如果有很多属性,它有时被视为哈希表?

我也理解,数组有时被视为C++数组(即快速随机索引,慢速删除和调整大小).而且,其他时候,它们更像对象(快速索引,快速插入/删除,更多内存).并且,有时它们可​​能存储为链接列表(即慢速随机索引,在开头/结尾快速删除/插入)

JavaScript中的数组/对象检索和操作的精确性能是什么?(专门针对Google V8)

更具体地说,它对性能的影响如下:

  • 向Object添加属性
  • 从Object中删除属性
  • 索引对象中的属性
  • 将项添加到数组
  • 从数组中删除项目
  • 索引数组中的项目
  • 调用Array.pop()
  • 调用Array.push()
  • 调用Array.shift()
  • 调用Array.unshift()
  • 调用Array.slice()

任何文章或链接的更多细节也将不胜感激.:)

编辑:我真的很想知道JavaScript数组和对象是如何工作的.此外,在什么情况下 V8引擎"知道""转换"到另一个数据结构?

例如,假设我用...创建一个数组

var arr = [];
arr[10000000] = 20;
arr.push(21);
Run Code Online (Sandbox Code Playgroud)

这里到底发生了什么?

或者......这个怎么样...... ???

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...
} …
Run Code Online (Sandbox Code Playgroud)

javascript arrays performance v8 object

104
推荐指数
2
解决办法
4万
查看次数

javascript Arrays实际上是作为数组实现的吗?

javascript之间的区别Array,Object并不是很大.实际上它似乎Array主要添加了length字段,因此您可以将Arrays和Objects用作数字数组:

var ar = new Array();
ar[0] = "foo";
ar["bar"] = "foo";

var ob = new Object();
ob[0] = "foo";
ob["bar"] = "foo";

assert(ar[0] == ob[0] == ar["0"] == ob["0"] == ar.bar == ob.bar); // Should be true.
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,在流行的JavaScript引擎(V8,JavaScriptCore,SpiderMonkey等)中,这是如何处理的?显然,我们不希望我们的数组实际存储为具有键值的哈希映射!我们怎样才能合理地确定我们的数据是否存储为实际数组?

据我所知,引擎可以采取一些方法:

  1. Array实现方式与Object- 使用字符串键的关联数组完全相同.
  2. Array是一个特殊情况,一个std::vector支持数字键的类似数组,以及一些密度启发式,以防止疯狂的内存使用ar[100000000] = 0;
  3. Array是相同的Object,并且所有对象都获得启发式,以查看使用数组是否更有意义.
  4. 我没有想到的东西非常复杂.

如果有一个合适的阵列类型(咳嗽 WebGL类型阵列咳嗽),这真的会更简单.

javascript arrays performance v8 spidermonkey

19
推荐指数
2
解决办法
4667
查看次数

标签 统计

arrays ×2

javascript ×2

performance ×2

v8 ×2

object ×1

spidermonkey ×1