Din*_*den 5 javascript optimization v8 destructuring micro-optimization
我已经运行了一些不同的变体,但这是我在 jsbench.me 上进行的基本测试:
https://jsbench.me/j2klgojvih/1
这个初始基准测试具有明显的初始优化,使对象解构速度显着加快。如果将 t 的声明移到每个测试块中,底层优化就会消失,但数组解构仍然会丢失。
该测试是一个简单的概念,表示为:
const t = [1, 2, 3];
// Test 1 (Slower)
const [x, y, z] = t;
// Test 2 (Faster)
const {0: x, 1: y, 2: z} = t;
Run Code Online (Sandbox Code Playgroud)
我认为 V8(或任何 JS 引擎)可以/应该更快地运行数组解构;然而,在这种情况下,我无法对测试进行改变。
如果我要猜测其推理,那就是数组解构运行一些迭代器来循环数组。
jmr*_*mrk 14
(V8 开发人员在此。)
如果我要猜测其推理,那就是数组解构运行一些迭代器来循环数组。
是的。规范几乎要求这样做。
为什么要迭代静态已知属性?
在 JavaScript 中,“静态已知”的东西比乍看起来要少得多。即使它们可以在微基准测试中静态导出,也可能不足以优化它们,因为现实世界的代码往往要复杂得多。
我问这个绝对是为了微观优化的目的。
请注意,微基准通常会产生误导,即使对于微优化也是如此。如果您的实际用例与基准不同,那么基准的结果很可能不具有代表性,因此很可能会导致您将时间浪费在没有帮助甚至适得其反的事情上。
在这种特殊情况下,我没有理由怀疑数组解构可能会比对象解构慢一些,无论情况如何;但相对差异以及因此是否重要在很大程度上取决于情况(例如:函数大小、调用计数、内联性、使用或忽略的结果、输入是常量还是变化等因素,...)。
因此,我想看看这个问题是否会长期保持稳定,或者是否只是尚未解决。
我不知道数组解构是否有很多未开发的性能潜力,也不知道是否/何时有人可能会研究它。
它的设计目的并不是要具有令人难以置信的性能
哦,是的,是的;我们不断努力使其性能更加出色。
| 归档时间: |
|
| 查看次数: |
2685 次 |
| 最近记录: |