相关疑难解决方法(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数组如何在物理内存中表示?

我的理解是,我可以将混合数据存储在JavaScript数组中,以及将数组中的任何元素更改为其他类型.解释器如何跟踪任何元素在物理内存中的位置.如果我将元素更改为更大的数据类型,如何防止覆盖下一个元素中的数据.

我假设数组只存储对实际对象的引用,并且当放置在数组中时,基元被包裹在场景后面.

假设是这种情况,如果我对原始变量有不同的句柄并更改存储在数组中的值是同步性保持?

我知道我可能已经回答了我自己的问题,但我不确定,我找不到有关此事的任何信息.

javascript arrays dynamic weakly-typed

46
推荐指数
3
解决办法
9946
查看次数

JavaScript数组实际上是链接列表吗?

我是Javascript的新手,并注意到你不需要指定一个数组的大小,并经常看到人们一次动态创建数组元素.这在其他语言中将是一个巨大的性能问题,因为随着它的大小增加,您将不断需要为该阵列重新分配内存.

这不是JavaScript中的问题吗?如果是这样,那么是否有可用的列表结构?

javascript arrays linked-list

20
推荐指数
4
解决办法
1万
查看次数

为什么在Javascript中使用类似数组的对象?

我知道,因为javascript允许对象的数字键,因此技术上可能存在类似数组的对象,但为什么它们变得普遍?

也许这个想法是这些类似数组的对象不仅具有数字键,例如arguments具有callee属性,因此它们不能是适当的数组来容纳这些属性.

但是在javascript中,将数组视为对象并使用非数字键是完全有效的:

var myArguments = []; 
myArguments[0] = 0; 
myArguments['callee'] = function(){console.log('callee')};
Run Code Online (Sandbox Code Playgroud)

如果对象是类似数组的,并且可以从访问函数中获益,否则它将从数组原型继承,那么使它成为类似数组的对象会有什么好处呢?


编辑:如果在我的问题中不清楚,像对象这样的数组就像arguments是具有从零开始的连续数字属性的对象,并且具有比最高数字键小1的长度属性.它也不从数组原型继承,也不提供对数组方法的访问.

javascript arrays object

6
推荐指数
1
解决办法
509
查看次数

Array.push与Array.unshift的性能

我正在阅读关于数组操作的运行时复杂性并了解到......

  • ECMAScript规范没有规定特定的运行时复杂性,因此它取决于具体的实现/ JavaScript引擎/运行时行为[1] [2].
  • Array.push()运行在恒定Array.unshift()直线通过像数据结构的哈希表来实现稀疏数组时间[3] .

现在,我在想是否pushunshift对相同的恒定分别线性时间复杂度密集阵列.Firefox/Spidermonkey的实验结果证实:

数组推送与非移位性能

现在我的问题:

  • 是否有官方文档或参考资料确认观察到的Firefox/Spidermonkey和Chrome/Node/V8的运行时性能?
  • 为什么unshift没有用类似的常量运行时实现push(例如维护索引偏移;类似于perl数组)?

javascript arrays performance time-complexity

5
推荐指数
1
解决办法
4045
查看次数