11. JavaScript 引擎横向对比
中对比 JS 引擎,不要背跑分,重点讲 架构共性和场景差异。
主要引擎
- V8:Chrome、Edge、Node.js、Deno、Electron 等使用。
- SpiderMonkey:Firefox 使用。
- JavaScriptCore(JSC):Safari / WebKit 使用,Bun 也基于 JSC 做运行时封装。
- Hermes:React Native 常用,强调移动端启动速度和包体。
- QuickJS:体积小,适合嵌入式或工具场景。
现代 JS 引擎的共性
主流引擎大多具备:
- 字节码或中间表示。
- 解释器 + 多层 JIT。
- IC / Shape / 隐藏类等属性访问优化。
- 反馈驱动优化。
- 推测失败后的 deopt / bailout。
- 分代、增量或并发 GC。
所以回答时可以先说“总体趋势趋同”,再讲各自差异。
V8
V8 的典型链路是 Ignition → Sparkplug → Maglev → Turbofan。
特点:
- Chrome 和 Node 生态强。
- 隐藏类、IC、反馈向量驱动优化。
- GC 使用分代、增量、并发等策略。
- 有指针压缩、Sandbox、Snapshot 等工程优化。
SpiderMonkey
SpiderMonkey 是 Firefox 的 JS 引擎。
常见关键词:
- Bytecode Interpreter。
- Baseline Interpreter / Baseline Compiler。
- WarpMonkey 作为高层优化路径。
- Shape 和 IC 用于对象属性访问优化。
它和 V8 一样,也是反馈驱动、多层优化、失败回退。
JavaScriptCore
JSC 是 WebKit / Safari 的 JS 引擎。
常见分层表述:
- LLInt:解释器。
- Baseline JIT:快速机器码。
- DFG JIT:中层优化。
- FTL JIT:更激进优化。
JSC 通常和 Apple 的平台、能耗、内存策略联系紧密。
Hermes 和 QuickJS
Hermes 面向 React Native,更重视移动端启动速度、包体和内存可控性。
QuickJS 体积小、易嵌入,适合脚本工具或嵌入式,不是为浏览器峰值性能设计。
总结
V8、SpiderMonkey、JSC 都是现代高性能浏览器引擎,核心方向都是多层执行、反馈优化和 GC 降停顿。Hermes、QuickJS 更偏具体场景,不适合简单和浏览器引擎比跑分。