JS V8 编译器优化,Monomorph Polymorph,(密封的)对象和类,OOP

问题描述 投票:0回答:0

我找到的所有关于 V8 和单态/多态的文章都只提到对象的形状应该保持不变,因此 JIT 编译器可以将其优化为单态函数。但是像你通过 OOP 和继承获得的类似形状的对象呢?

我对以下非常常见的 OOP 案例感兴趣,您有一堆 similar 形状的对象,例如当具有类层次结构时,类(及其对象)共享公共属性。例如:

obj1 = {
  foo: 42,
  bar: true
}

obj2 = {
  baz: "abc",
  foo: 666,
  qux: null
}

现在当有一些只使用

foo
属性的函数时,我可以将所有这些不同的对象传递给它。从函数的角度来看,它们都具有相同的形状
{ foo: number } + *
,但由于附加属性
bar
baz
qux
,它们的实际形状当然是不同的。

JIT 编译器是否以某种方式涵盖了这种情况?

如果不是,如何重构相似形状的对象以适应“单态”模式?

javascript performance javascript-objects v8
© www.soinside.com 2019 - 2024. All rights reserved.