同样是 JavaScript,为什么它可以运行在浏览器网页中,也可以运行在服务器终端,还可以开发桌面应用?

为什么 Chrome、Node.js、Electron 都可以运行 JavaScript,但它们的能力完全不同?

V8、Blink、WebKit、Chromium 这些名字到底是什么关系?

很多开发者在学习前端、Node.js 或 Electron 时,都会遇到这些概念。

例如:

  • V8 是不是浏览器内核?

  • Chromium 是不是 Chrome?

  • WebKit 和 V8 是竞争关系吗?

  • Node.js 为什么没有 DOM?

  • Electron 为什么可以开发桌面软件?

这些问题的根源在于:

我们经常把不同层次的概念混在了一起。

本文通过一张 JavaScript Runtime 全景图,把这些概念拆开。


1. 先建立整体认知模型

JavaScript 世界可以分成四个层次:

┌───────────────────────────┐
│       Web 技术层            │
│ HTML / CSS / JavaScript    │
└────────────┬──────────────┘
             │
             ▼
┌───────────────────────────┐
│       引擎层                │
│                            │
│ 渲染引擎:Blink / WebKit    │
│ JS引擎:V8 / JavaScriptCore │
└────────────┬──────────────┘
             │
             ▼
┌───────────────────────────┐
│       平台层                │
│ Chromium / WebKit          │
└────────────┬──────────────┘
             │
             ▼
┌───────────────────────────┐
│       产品 / Runtime层      │
│ Chrome / Safari / Node /   │
│ Electron                   │
└───────────────────────────┘

最重要的三个结论:

第一:

HTML、CSS、JavaScript 是开发者写的内容。


第二:

Blink、WebKit 负责页面显示;V8、JavaScriptCore 负责执行 JavaScript。


第三:

Chrome、Node.js、Electron 是运行环境,不是 JavaScript 引擎。


2. 打开一个网页时,到底发生了什么?

假设我们有一个简单网页:

<h1>Hello World</h1>

<button>
Click
</button>

<script>
console.log("hello")
</script>

浏览器内部大概这样工作:

              网页代码

       HTML       CSS       JavaScript
        │          │            │
        │          │            │
        ▼          ▼            ▼

      Blink      Blink         V8

        │                         │

        ▼                         ▼

     页面绘制                  JS执行

以 Chrome 为例:

内容 负责组件
HTML Blink
CSS Blink
JavaScript V8

一个重要误区:

很多人认为:

V8 是 Chrome 的核心,负责整个网页。

这是错误的。

实际上:

V8 只负责 JavaScript:

例如:

const result = a + b;

console.log(result);

V8 负责:

  • 解析 JavaScript

  • 编译优化

  • 执行代码

但是:

document.querySelector("#button")

里面的:

document
DOM
window

并不是 JavaScript 自带的。

它们来自浏览器。

也就是说:

JavaScript语言
        +
浏览器提供的API
        =
网页开发能力

3. Chromium、Blink、V8 和 Chrome 的关系

这是最容易混淆的一组概念。

很多人看到:

Chrome
Chromium
Blink
V8

以为它们是并列关系。

实际上:

              Chrome

                 │

                 ▼

             Chromium

        ┌────────┴────────┐

        ▼                 ▼

      Blink              V8

   页面渲染          JavaScript执行

Chromium 是什么?

Chromium 是 Google 开源的浏览器项目。

它包含:

  • Blink 渲染引擎

  • V8 JavaScript 引擎

  • 网络模块

  • 多进程架构

  • 沙箱安全机制

  • DevTools

它是一个完整浏览器基础平台。


Chrome 是什么?

Chrome 是 Google 基于 Chromium 做出来的浏览器产品。

可以理解为:

Chrome

=

Chromium

+

Google服务

+

自动更新

+

同步功能

+
其它商业组件

所以:

Chrome ⊃ Chromium ⊃ Blink + V8

4. Blink 和 WebKit:浏览器世界的两条路线

现代浏览器主要有两大路线。


Chromium 路线

代表:

  • Chrome

  • Edge

  • Opera

  • Electron

结构:

Chromium

 ├── Blink
 │
 │    HTML/CSS
 │       ↓
 │    页面显示
 │
 └── V8
      ↓
   JavaScript执行

WebKit 路线

代表:

  • Safari

结构:

WebKit

 ├── Rendering Engine
 │
 └── JavaScriptCore(JSC)
          ↓
      JavaScript执行

两者比较:

Chromium WebKit
浏览器 Chrome Safari
渲染引擎 Blink WebKit
JS引擎 V8 JavaScriptCore

注意:

WebKit 和 V8 不是竞争关系

很多人会误认为:

WebKit vs V8

实际上不是。

正确比较:

Blink  vs  WebKit

        (负责画页面)


V8  vs  JavaScriptCore

        (负责执行JS)

它们属于不同层。


5. Node.js:JavaScript 离开浏览器

浏览器里的 JavaScript:

window

document

DOM

alert

这些能力来自浏览器。

如果 JavaScript 想运行在服务器怎么办?

Node.js 给出了答案。

Node.js:

把 V8 放到了操作系统环境中。

结构:

             Node.js


               V8

                +

        操作系统 API

        fs
        http
        path
        process

                +

             libuv

例如:

读取文件:

fs.readFile()

启动服务器:

http.createServer()

这些浏览器 JavaScript 都不能直接做。


所以:

浏览器 Node.js
JS引擎 V8/JSC V8
DOM
文件系统 限制 支持
HTTP服务 不适合 常用

6. Electron:浏览器 + Node.js

如果我们想:

  • 使用 HTML/CSS 做 UI

  • 使用 JavaScript 写逻辑

  • 又访问本地文件

怎么办?

Electron 出现了。

Electron 的核心:

Electron

      Chromium

          +

       Node.js

架构:

              Electron


       ┌───────────────┐
       │ Chromium      │
       │               │
       │ Blink + V8    │
       └───────────────┘


       ┌───────────────┐
       │ Node.js       │
       │               │
       │ 文件系统       │
       │ 系统能力       │
       └───────────────┘

所以:

VS Code 为什么可以用 JavaScript 写?

因为:

VS Code

=

Electron

=

Chromium

+

Node.js

7. 三种运行环境对比

Chrome Node.js Electron
V8
Blink
DOM
文件系统
桌面能力 部分

一句话:

Chrome

= 看网页


Node.js

= 跑JavaScript程序


Electron

= 用网页技术开发桌面软件

8. 一张图串起来

                 HTML
                   +
                 CSS
                   +
             JavaScript

                    │

                    ▼


        ┌─────────────────────┐
        │      浏览器           │
        │                     │
        │ Chromium            │
        │                     │
        │ Blink + V8          │
        └─────────────────────┘



        ┌─────────────────────┐
        │      Node.js         │
        │                     │
        │ V8                  │
        │ + 系统API           │
        └─────────────────────┘



        ┌─────────────────────┐
        │      Electron        │
        │                     │
        │ Chromium + Node.js  │
        └─────────────────────┘


9. 日常开发如何对应?

开发场景 背后运行环境
React 页面 浏览器
Vue 页面 浏览器
npm Node.js
Vite Node.js
Express Node.js
VS Code Electron
桌面客户端 Electron

10. 最终记忆模型

以后看到这些名字:

Blink / WebKit

想到:

页面怎么画


V8 / JavaScriptCore

想到:

JavaScript 怎么执行


Chromium

想到:

浏览器基础平台


Chrome

想到:

一个完整浏览器产品


Node.js

想到:

没有网页的 JavaScript Runtime


Electron

想到:

Chromium + Node.js 的桌面运行环境


总结

JavaScript 本身没有变化。

变化的是它运行的环境。

浏览器:

JavaScript
+
DOM
+
页面渲染


Node.js:

JavaScript
+
操作系统能力


Electron:

JavaScript
+
页面能力
+
系统能力

理解这套分层之后:

  • V8 和 WebKit 的关系

  • Chromium 和 Chrome 的关系

  • Node.js 为什么没有 DOM

  • Electron 为什么能开发桌面软件

都会变得非常清晰。

下一次看到一个新技术名词,不要问“它是不是浏览器内核”,先问:

它属于语言层?引擎层?平台层?还是运行环境层?

这就是理解现代 JavaScript 生态的关键。


配套可视化:

runtime-landscape.html

可以直接用浏览器打开查看 JavaScript Runtime 全景图。你上传的 HTML 文件已经包含了这套关系图的可视化实现。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐