5月30日 19:58

Chrome 的 V8 引擎如何执行 JavaScript?

V8 执行 JavaScript 不是直接把源码一路翻成机器码。大致流程是:源码先被解析成 AST,再由 Ignition 生成并执行字节码;运行中如果某段代码频繁执行,V8 会收集类型反馈,把它交给 TurboFan 优化成机器码。优化依赖“假设”,比如对象形状稳定、函数参数类型稳定;一旦假设被打破,就会发生去优化。

追问

隐藏类和内联缓存是什么?

V8 会给结构相似的对象建立隐藏类,用来快速定位属性。内联缓存会记录某个属性访问曾经遇到的对象形状。

为什么不建议频繁 delete 属性?

delete 可能改变对象形状,让原本稳定的隐藏类失效。热点路径里更常见做法是置为 null 或创建新对象。

V8 的垃圾回收怎么影响页面?

大量临时对象会增加 minor GC 频率,长期被闭包、全局数组、事件监听器引用的对象会进入老生代,严重时页面会间歇卡顿。

代码怎么写更友好?

让对象结构稳定、避免热路径混用类型、减少循环里的临时对象。先用 Performance 和 Memory 确认瓶颈,再优化热点。

写段代码

js
function makeUser(id, name) { return { id, name, active: true }; } const u = makeUser(1, 'A'); u.active = false;
标签:Chrome