为什么浏览器阵列操作之间存在如此大的性能差异?

问题描述 投票:-1回答:1

我正在调整我的库goodcore并设置一些性能测试来与本机数组函数进行比较。然后我在笔记本电脑上对着Edge,FF,Chrome和Node 10.9运行它们。当然我的lib有不同的结果,但更有意思的是,浏览器之间的差异有时是最佳和最差之间的30倍,并且在操作之间似乎没有完全不同。

使用的数组长10000,随机整数介于0和100000之间。

编辑版本:

  • Chrome:68.0.3440.106
  • FF:62.0
  • 边缘:41.16299.371.0
  • 节点:10.9

以下是我的结果(仅适用于本机操作):

编辑:现在正确的值和自定义算法(没有原生)

数据显示Benchmark.js中的ops / sec。

这是由于数据结构实现还是微观优化?

node.js performance firefox microsoft-edge v8
1个回答
2
投票

这是由于数据结构实现还是微观优化?

是。

更长的答案:可能两者都有,但唯一可以回答这个问题的方法就是详细查看每个浏览器的实现。

你所测量的较大差异看起来似乎可能是由于引擎盖下数据结构的根本不同选择;然而,即使使用相同的基本数据结构,其余实现的效率也会产生巨大的差异(我已经看过10x - 100x)。

另外,恕我直言,你的结果有点可疑:Chrome和Node使用相同的V8引擎,应该具有非常相似的性能。像“indexOf”或“splice(remove 1)”这样的结果,你看到〜应该是相同结果的差异大约是10倍,表明你的基准测试中可能存在错误。如果这两个结果不可信,那么为什么你对Edge / Firefox结果更有信心?

说到基准质量:只使用一种类型的数组(只有一种尺寸,只有一种类型的内容,总是密集的)是你的结果可能不能反映完整故事的另一个原因;所以请小心从中得出任何结论。

为什么会有如此大的性能差异

因为快速制作Array内置方法需要大量的工程工作。每个浏览器的工程团队都在尽最大努力将时间花在他们认为最重要的功能上。结果是您将在各种实现中看到不同程度的优化。

如果选择的数据结构存在差异(我不知道),那么这些通常是权衡:一个选择可能在X处更快但在Y处比另一个选择更慢;或者一个可能更快但消耗更多的记忆;等等

© www.soinside.com 2019 - 2024. All rights reserved.