V8中的Slack追踪
· 阅读需 19 分钟
Slack追踪是一种为新对象分配比它们实际需要更大的初始大小的方法,以便快速添加新属性。然后,在一段时间后,神奇地将未使用的空间归还给系统。很酷吧?
Slack追踪是一种为新对象分配比它们实际需要更大的初始大小的方法,以便快速添加新属性。然后,在一段时间后,神奇地将未使用的空间归还给系统。很酷吧?
在默认配置下,V8 在正则表达式第一次执行时会将其编译为本地代码。作为我们对 无 JIT 的 V8 的工作的一部分,我们引入了一个正则表达式解释器。解释正则表达式的优势在于使用更少的内存,但会带来性能上的损失。本文中我们介绍了如何利用解释正则表达式的优势,同时减轻其缺点。
V8 使用 代码缓存 为频繁使用的脚本缓存生成的代码。从 Chrome 66 开始,我们通过在顶层执行后生成缓存,缓存了更多代码。这使初次加载时的解析和编译时间减少了 20–40%。
在这篇博客中,我们想解释一下V8如何在内部处理JavaScript属性。从JavaScript的角度来看,属性的区分需求只有少数几种。JavaScript对象大多像字典一样工作,具有字符串键和任意对象值。然而,规范在迭代期间将整数索引属性和其他属性区别对待。除此之外,不论属性是否是整数索引,它们的行为大致相同。
V8 团队目前正在开发一种新的默认编译管道,将帮助我们为真实世界的 JavaScript带来未来的加速效果。您可以在 Chrome Canary 中预览新管道,帮助我们确保当我们为所有 Chrome 频道推出新配置时不会出现任何意外。