正如我们所知,v8 启用了内联缓存以提高性能,
谁能解释一下 v8 究竟做了什么以及它如何提高性能?
如果显示一个示例,那就太好了。
提前致谢。
正如我们所知,v8 启用了内联缓存以提高性能,
谁能解释一下 v8 究竟做了什么以及它如何提高性能?
如果显示一个示例,那就太好了。
提前致谢。
直接取自Chrome V8 页面
V8 在第一次执行时将 JavaScript 源代码直接编译为机器码。没有中间字节码,没有解释器。属性访问由内联缓存代码处理,当 V8 执行时,这些代码可能会被其他机器指令修补......
和
...V8 通过预测此 [对象的] 类也将用于在同一代码段中访问的所有未来对象来优化属性访问,并使用类中的信息来修补内联缓存代码以使用隐藏类。如果 V8 预测正确,则在单个操作中分配(或获取)属性的值。如果预测不正确,V8 会修补代码以删除优化。
例如,从 Point 对象访问属性 x 的 JavaScript 代码是:
point.x
在 V8 中,为访问 x 生成的机器代码是:
# ebx = the point object
cmp [ebx,<hidden class offset>],<cached hidden class>
jne <inline cache miss>
mov eax,[ebx, <cached x offset>]