JavaScript v8 优化编译器 |单态,多态?

JavaScript v8 Optimization Compiler | Monomorphism, Polymorphism?

Chrome V8 优化编译器

单态、多态和巨态在速度上还有区别吗?

Monomorphism => [{a:47}, {a:5}, {a:9}];
Polymorphism => [{a:1, b:65}, {c:22, a:57, d:8},{e:14, a:819}];
...

(此处为 V8 开发人员。)

是的,可以肯定地说,永远都会有。

更难说的是它对你的申请是否重要。 例如,这取决于你在做什么。将不同种类的对象放入数组中根本没有任何区别;之后仅访问这些对象的属性会遇到多态性的概念(例如,如果您在其他地方有 for (let o of array) { o.a = 42; }——数组不关心,o.a 部分关心)。

此外,在微基准测试中清晰可见的效果可能只会影响噪声范围内的大型现实应用程序(例如,1% 或更少)。所以通常不值得为此担心,除非您有特定的理由(例如:分析结果)相信这可能是您的问题。