V8 不会优化超过 4 种对象类型?

V8 won't optimize more than 4 object types?

所以我在看 Franziska Hinkelmann 的 talk on the V8 engine

她在 20:03 评论说,如果对象类型超过四种,V8 引擎将不会优化。我刚开始node.js,所以我在这些事情上没有任何经验,但四个似乎是一个非常低的数字。面向对象软件通常不会涉及四种以上的对象类型吗?

我知道 V8 对一个对象可以拥有的用于快速处理的属性数量有限制(8,似乎也很少)。

这里是 V8 开发人员。在您所引用的演讲中,Franziska 所指的情况是 代码中的一个地方 (例如单个 do_something_with(obj.prop);)看到四种以上的类型(对于 obj),它切换到不同的模式。这与 "doesn't optimize" 不同——相反,当 V8 检测到这种模式时,它会针对它进行优化;碰巧针对高度多态代码的优化与针对单态代码的优化需要不同的方法。

正如 jfriend00 已经评论过的,您很可能不必担心这个内部细节。

此外,根据记录,一个对象在 fast-to-access/slow-to-create 配置中可以拥有的属性数量约为 1,000。 (这是另一种情况,没有 "good"/"fast" 和 "bad"/"slow" 状态,而是 "optimize for one" 或 "optimize for the other"。 )