JS 引擎全景图:这些引擎分别跑在哪些 Runtime 和产品里?

JS 引擎全景图:这些引擎分别跑在哪些 Runtime 和产品里?

JS 引擎全景图:这些引擎分别跑在哪些 Runtime 和产品里?

发布于 2026年05月05日 01:38 #DevOps

AI 摘要区分引擎、runtime、产品三层:引擎是发动机,runtime是整车系统,产品是最终交付的车V8 是最强势的通用底座,驱动 Node、Deno、Cloudflare Workers 及 Chromium 系浏览器JavaScriptCore 走另一条路,成为 Safari 和 Bun 的核心选择,强调启动速度与嵌入体验轻量引擎如 QuickJS、JerryScript、XS 靠嵌入场景生存,服务于 IoT、微控制器和自定义宿主Hermes 为 React Native 优化启动速度与包体积,是产品反向定义引擎的典型 最近我在整理 AI 时代的基础设施赛道时,顺手又把 JS 引擎这条线捋了一遍。

越看越觉得,很多人平时聊 Bun、Deno、Cloudflare、React Native,其实都在聊同一件事,只是站的位置不同。

有人聊的是引擎,像 V8、JavaScriptCore、SpiderMonkey。

有人聊的是 runtime,像 Node.js、Deno、Bun、Cloudflare Workers。

还有人聊的是产品,像 Safari、Firefox、React Native、Moddable。

这三层经常被混在一起,但它们不是一回事。先把这个拆开,后面就顺了。

先说结论

如果你只想知道答案,我的结论很简单。

V8 仍然是最强势的通用底座,Node、Deno、Cloudflare Workers 都在它这条线上

JavaScriptCore 走的是另一条路,Safari 和 Bun 都把它变成了自己的核心选择

SpiderMonkey 更像 Firefox 生态里的老牌主心骨

Hermes、QuickJS、JerryScript、XS、MuJS、GraalJS 这些,则分别卡在移动端、嵌入式和 JVM 生态里

所以这篇文章真正想回答的,不是“JS 引擎有哪些”,而是“这些引擎到底落在了哪些实际产品里,以及为什么会这样”。

先把三层分清

我先用最短的话把它们拆开。

JS 引擎负责把 JavaScript 解析、编译、执行

Runtime 负责给这段 JavaScript 提供宿主环境,比如文件系统、网络、权限、事件循环、模块系统

产品是最终被开发者或用户接触到的东西,比如浏览器、移动框架、云函数平台、嵌入式 SDK

你可以把关系理解成这样。

引擎是发动机,runtime 是整车系统,产品是最终卖给你的车。

V8 本身不是 Node.js,JavaScriptCore 也不是 Safari。

Node.js、Deno、Bun、Cloudflare Workers 这些 runtime,才是真正把引擎包装成开发者每天会用的东西。

别小看这个区分。很多技术选型争论,表面上是在争引擎,实际上争的是 runtime、生态和默认体验。

先从最常见的三家说起

先说最广为人知的三家。

V8

V8 是 Google 的 JavaScript 和 WebAssembly 引擎,也是今天最有影响力的 JS 引擎之一。

它现在最典型的落点有几个。

Node.js

Deno

Cloudflare Workers

Chromium 系浏览器

这意味着什么。

如果你平时写 Node 或 Deno,大概率就是在 V8 上跑代码。Cloudflare Workers 虽然看起来像边缘平台,但它底层也是 V8 isolate 这一套。

V8 的意义不只是“快”,而是它已经变成了现代 JavaScript 生态最重要的底层事实之一。很多上层产品看起来不同,底层其实都踩在同一块地基上。

SpiderMonkey

SpiderMonkey 是 Mozilla 的 JavaScript 和 WebAssembly 引擎,最典型的使用方是 Firefox。

它的常见落点有。

Firefox

Servo

MongoDB 的 server-side JavaScript 路径(MongoDB 8.0 起已废弃)

CouchDB 的默认 JavaScript query server(CouchDB 3.4 起也提供 QuickJS 选项)

SpiderMonkey 的位置很有意思。

它不像 V8 那样在 server/runtime 世界里大规模扩散,但它在浏览器和 Mozilla 生态里仍然是核心引擎。MongoDB、CouchDB 这类数据库里的使用也更偏“内嵌脚本执行能力”,而且状态会随产品演进变化:MongoDB 已经开始弱化 server-side JavaScript,CouchDB 也在引入 QuickJS。对很多开发者来说,SpiderMonkey 更多是“浏览器兼容性的一部分”,而不是“自己会直接拿来嵌入的引擎”。

JavaScriptCore

JavaScriptCore 是 WebKit 的内置引擎,也就是 Safari 背后的引擎。

它最典型的使用方有。

Safari / WebKit

Apple 平台上的 WebKit 相关应用

Bun

JavaScriptCore framework

React Native 的可选回退引擎

JavaScriptCore 的影响力很大,但很多人未必意识到它已经悄悄进入了 Bun 这条新路线。

Bun 选择 JSC,而不是 V8,本质上是在赌启动速度和嵌入体验。

再看轻量和嵌入式这一支

这组引擎的共同点很直接,不是为了“统治浏览器”,而是为了“可以被塞进别的产品里”。

QuickJS

QuickJS 是 Fabrice Bellard 做的一个小而强的可嵌入引擎。

它的典型定位很明确。

小体积

低启动开销

易嵌入

可把 JavaScript 编译成独立可执行文件

QuickJS 的常见用途通常不是某个超级大 runtime,而是工具、脚本宿主、嵌入式程序、自定义产品里的脚本层。

如果你要做一个“自己的脚本系统”,QuickJS 这种引擎就很顺手。很多时候你不需要一个大而全的东西,只需要一个够轻、够稳、够好嵌的内核。

JerryScript

JerryScript 是面向 IoT 和微控制器的 JavaScript 引擎。

它的官方定位就是非常受限的设备,比如内存只有几十 KB 的场景。

所以它的典型使用方不是浏览器,也不是云平台,而是嵌入式设备、传感器、微控制器一类产品。

XS

XS 是 Moddable 的 JavaScript 引擎。

它主要服务于。

Moddable SDK

微控制器和嵌入式设备

XS 的思路跟 QuickJS、JerryScript 很像,都是把 JavaScript 带到资源受限设备上,只是它更强调标准兼容和嵌入式开发体验。

MuJS

MuJS 是一个轻量级、可嵌入的 JavaScript 解释器,官方文档里直接强调它适合嵌入到其他软件里作为脚本能力。

它常见于。

自定义宿主程序

文档处理、图形处理这类需要脚本扩展的产品

MuJS 的存在感没那么强,但它很适合说明一件事,JavaScript 不只属于浏览器和 Node,它也可以是一个很小的可嵌入脚本层。

移动端这边,Hermes 是最典型的

这一组最典型的是 Hermes。

Hermes

Hermes 是 Meta 做的 JS 引擎,主要为 React Native 优化。

它的使用方非常明确。

React Native

React Native 文档已经直接写明,Hermes 是默认引擎,并且在新版本里会带来更好的启动时间、内存占用和包体积表现。文档也保留了切回 JavaScriptCore 的配置路径,所以这里更准确的说法是:Hermes 是默认选择,JSC 是可选回退。

这个例子很重要,因为它说明了一件事,很多引擎不是为了“通用胜出”,而是为了某个具体产品形态做到极致。

Hermes 不是和 V8 正面硬刚浏览器份额,而是在移动端应用里,把启动速度和包体积压到更实用的区间。

Java 生态里,GraalJS 也占了一块

GraalJS

GraalJS 是运行在 GraalVM 上的 JavaScript 实现。

它最典型的落点有两个。

GraalVM

Java 应用里的脚本嵌入

GraalJS 的价值不是“又一个浏览器引擎”,而是它把 JavaScript 变成了 JVM 生态里的可嵌入语言。这个定位很清楚,也很实用。

如果一个团队本来就重度依赖 Java,想在系统里嵌脚本、做规则引擎、做扩展能力,GraalJS 就会很有吸引力。

ChakraCore

ChakraCore 是微软开源的 JS 引擎。

它今天更偏历史和存量用途,官方仓库也明确提到 Edge 已经不再使用 Chakra。

所以它的典型语境更多是:

旧项目

C API 嵌入

维护历史兼容

如果你今天在新项目里选引擎,大概率不会优先考虑它,但它依然是这张技术地图里绕不开的一块。

一张对照表

如果把这些引擎和常见 runtime / 产品直接对照,基本可以这样理解。

引擎主要被哪些 runtime / 产品在用V8Node.js、Deno、Cloudflare Workers、Chromium 系浏览器SpiderMonkeyFirefox、Servo、MongoDB server-side JavaScript(已废弃路径)、CouchDB 默认 query server(同时已有 QuickJS 选项)JavaScriptCoreSafari / WebKit、Apple 平台应用、Bun、React Native 的可选回退HermesReact NativeQuickJS各种嵌入式工具、脚本宿主、自定义应用JerryScriptIoT、微控制器、极低资源设备XSModdable SDK、嵌入式设备MuJS自定义宿主程序、轻量级脚本扩展GraalJSGraalVM、Java 应用、JVM 生态脚本嵌入ChakraCore存量项目、旧式嵌入场景

这张图真正说明了什么

这张表看起来像名单,但背后其实是三层非常清楚的分工。

1. 浏览器引擎会自然外溢到 runtime

V8 和 JavaScriptCore 都不是只待在浏览器里。

V8 直接外溢到了 Node、Deno、Cloudflare Workers。

JavaScriptCore 则外溢到了 Bun 和一些嵌入式应用场景。

这说明引擎的竞争,不只是浏览器内部的事,而是会直接影响整个开发者生态。你在上层选什么产品,往往就是在下层选什么引擎。

2. 轻量引擎靠嵌入场景活着

QuickJS、JerryScript、XS、MuJS 这种引擎,靠的不是巨大生态,而是“好嵌入、够轻、可控”。

如果你的产品本身就是一个宿主,那么引擎就不是主角,而是你给产品补的一层脚本能力。

3. 特定产品会反过来定义引擎

Hermes 就是最好的例子。

React Native 需要更好的启动、更低的内存、更小的包体积,于是 Hermes 这类引擎就会被产品需求反向塑形。

换句话说,有些引擎不是先找市场,再找产品,而是先被一个明确产品形态逼出来的。

开发者该怎么理解这件事

如果你只是日常写前端、Node、Bun、Deno,最常接触的其实只有三层。

V8 生态,Node、Deno、Workers 很多都在这上面

JavaScriptCore 生态,Bun 是典型代表

Hermes 生态,React Native 是典型代表

如果你在做嵌入式、IoT、桌面工具、自定义脚本宿主,那你会更常碰到 QuickJS、JerryScript、XS、MuJS 这种轻量引擎。

如果你在 Java 生态里做扩展脚本,GraalJS 就会更顺手。

所以“哪种引擎最好”这个问题,其实没那么有意义。

更有意义的是:

你的宿主是谁

你要什么样的启动、内存和兼容性

你到底是在做 runtime,还是在做一个需要嵌入脚本能力的产品

最后

JS 引擎不是一个“只有前端才关心”的话题。

它已经变成了 runtime、产品形态和基础设施选择的一部分。

你选 V8,往往意味着你更接近通用生态和成熟兼容。

你选 JavaScriptCore,往往意味着你看重启动速度、嵌入体验,或者你本来就处在 Apple/WebKit 生态里。

你选 Hermes,往往意味着你在移动端和包体积上有明确约束。

你选 QuickJS、JerryScript、XS、MuJS,往往意味着你在做嵌入式或自定义宿主。

你选 GraalJS,往往意味着你在 Java 世界里找脚本能力。

真正重要的不是“JS 有多少引擎”,而是你要把 JS 放进什么系统里,解决什么问题。

延伸阅读

MDN JavaScript engines overview, https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/JavaScript_technologies_overview

V8, https://v8.dev/

SpiderMonkey official site, https://spidermonkey.dev/

SpiderMonkey docs, https://firefox-source-docs.mozilla.org/js/index.html

Servo and SpiderMonkey, https://servo.org/blog/2024/04/15/spidermonkey/

MongoDB server-side JavaScript, https://www.mongodb.com/docs/upcoming/core/server-side-javascript/

CouchDB query server, https://docs.couchdb.org/en/stable/query-server/index.html

CouchDB QuickJS option, https://docs.couchdb.org/en/stable/config/quickjs.html

JavaScriptCore docs, https://docs.webkit.org/Deep%20Dive/JSC/JavaScriptCore.html

Bun runtime, https://bun.com/docs/runtime

Deno runtime, https://docs.deno.com/runtime/

Cloudflare Workers runtime, https://developers.cloudflare.com/workers/reference/how-workers-works/

Hermes docs, https://reactnative.dev/docs/Hermes

QuickJS, https://www.bellard.org/quickjs/

JerryScript, https://jerryscript.net/

Moddable XS FAQ, https://www.moddable.com/faq

MuJS, https://mujs.com/introduction.html

GraalJS, https://www.graalvm.org/reference-manual/graaljs/

ChakraCore, https://github.com/chakra-core/ChakraCore

← 上一篇: 世界上最奇葩的青蛙,一不小心会气炸,网友:蛤蟆功?
下一篇: 白虎污图片 →

相关推荐