前端阅读 02026年5月30日 19:58
Chrome 的 V8 引擎如何执行 JavaScript?
V8 执行 JavaScript 不是直接把源码一路翻成机器码。大致流程是:源码先被解析成 AST,再由 Ignition 生成并执行字节码;运行中如果某段代码频繁执行,V8 会收集类型反馈,把它交给 TurboFan 优化成机器码。优化依赖“假设”,比如对象形状稳定、函数参数类型稳定;一旦假设被打破,就会发生去优化。追问隐藏类和内联缓存是什么?V8 会给结构相似的对象建立隐藏类,用来快速定位属性。内联缓存会记录某个属性访问曾经遇到的对象形状。为什么不建议频繁 delete 属性?delete 可能改变对象形状,让原本稳定的隐藏类失效。热点路径里更常见做法是置为 null 或创建新对象。V8 的垃圾回收怎么影响页面?大量临时对象会增加 minor GC 频率,长期被闭包、全局数组、事件监听器引用的对象会进入老生代,严重时页面会间歇卡顿。代码怎么写更友好?让对象结构稳定、避免热路径混用类型、减少循环里的临时对象。先用 Performance 和 Memory 确认瓶颈,再优化热点。写段代码function makeUser(id, name) { return { id, name, active: true }; }const u = makeUser(1, 'A');u.active = false;