正如我们所知,v8支持内联缓存以提高性能,
任何人都可以解释v8究竟做了什么以及它如何改善性能?
如果显示示例,那将会很好。
提前感谢。
答案 0 :(得分:2)
直接来自Chrome V8 page
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>]