浏览器内核详解:Blink、WebKit、Gecko 与一次页面的六步渲染

最后更新 2026-10-24

1

「内核」到底指什么:两套引擎,一件事

渲染引擎(Rendering / Layout Engine)
把 HTML、CSS 解析成页面并画到屏幕上。日常说的「浏览器内核」通常指它:Blink、WebKit、Gecko、Trident。
JavaScript 引擎
执行脚本。V8、SpiderMonkey、JavaScriptCore。它与渲染引擎在同一个浏览器里协作,但来源和迭代节奏各自独立。

很多人把「浏览器」和「内核」混着说。准确的关系是: 一个内核可以被很多浏览器使用,一个浏览器也可以在不同时期换内核。Edge 就是最典型的例子——2015 年用自研 EdgeHTML, 2020 年换成 Chromium 的 Blink,名字没变,内核换了。所以判断「两个浏览器是不是同源」,看内核比看品牌可靠。

2

五大内核谱系:谁从谁分叉出来

今天的浏览器内核其实是两条主线加两条支线:KHTML 分叉出 WebKit,WebKit 再分叉出 Blink(现在的主流); Gecko 独立演进;Trident 与 Presto 已经退场。

各排版引擎使用份额统计图
图 1 · 各排版(渲染)引擎的使用份额。Wikimedia Commons,公有领域(Public domain)。
内核出身代表浏览器现状
Blink2013 年从 WebKit 分叉,Google 主导Chrome、Edge、Opera、Brave、Vivaldi、Arc、Chromium;国产 360 / QQ / 夸克 / 搜狗 等多为 Chromium 派生事实标准,份额第一
WebKit2001 年由 KHTML 分叉,Apple 主导Safari;iOS / iPadOS 上所有浏览器(受平台规则限制)移动端份额极高
GeckoNetscape 时代自研,Mozilla 维护Firefox、Tor Browser、Waterfox、Thunderbird独立第三极
Trident(MSHTML)微软 IE 时代自研Internet Explorer 11 及更早2022-06-15 正式退役
EdgeHTML微软在 Trident 之上重写旧版 Edge(2015–2020)2021-03 停止支持,改用 Blink
PrestoOpera 自研Opera 12 及更早2013 年转向 Blink

「分叉(fork)」指拿一份开源代码另起分支独立演进。Blink 分叉后与 WebKit 已渐行渐远,不能视为同一内核。

3

一次页面打开,内核做了什么

从按下回车到看见像素,渲染引擎要做六件事。理解这条链路,排障时才知道该看哪一层:白屏多是网络或解析,闪烁多是布局,卡顿多是绘制与合成。

阶段做了什么出问题时的典型症状
① 解析 HTML → DOM把标签流转成节点树;遇到脚本可能暂停解析白屏、内容顺序错乱、脚本阻塞首屏
② 解析 CSS → CSSOM样式表变成规则树;外链 CSS 会阻塞首帧渲染无样式闪烁(FOUC)、首屏变慢
③ 合成渲染树DOM + CSSOM → 只含可见节点的渲染树元素该显示却没显示(display:none 的误用)
④ 布局 / 回流(Layout / Reflow)计算每个盒子的位置与尺寸页面抖动、CLS 差、图片没有宽高导致跳动
⑤ 绘制(Paint)把盒子画成图层上的像素文字发虚、边框错位、阴影裁切
⑥ 合成(Composite)GPU 把图层叠成最终画面滚动卡顿、动画掉帧
「回流」比重绘更贵:改动几何属性(宽高、位置、字体大小)会触发回流,改颜色通常只触发重绘。这也是为什么动画优先用 transform / opacity——它们可以只走合成层。
4

JavaScript 引擎:另一条并行的技术线

JS 引擎负责把脚本编译成机器码并执行。它和渲染引擎通过绑定层(binding)通信——DOM 操作本质上就是跨层调用, 所以「少碰 DOM、批量改样式」这类优化建议才成立。

V8 JavaScript 引擎标志
图 2 · V8 是 Chromium 系浏览器的 JS 引擎,也被 Node.js、Deno 等运行时复用。Wikimedia Commons,公有领域。
JS 引擎所属内核 / 产品特点
V8Blink(Chrome、Edge、Opera…)即时编译(JIT)成熟,生态最大;Node.js 也用它
SpiderMonkeyGecko(Firefox)最早的 JS 引擎之一,近年强化 Wasm 与并发 GC
JavaScriptCore(Nitro)WebKit(Safari)Apple 优化,移动端能效表现好
Chakra旧 Edge(EdgeHTML 时期)已随 EdgeHTML 退场

同一个内核可以换 JS 引擎,反之亦然。讨论「跑分快不快」时,JS 引擎的影响往往比渲染引擎更直接。

5

多进程架构:为什么一个标签页崩了浏览器不倒

现代浏览器不是单个进程。Chromium 系把职责拆成几个角色,崩溃隔离与安全沙箱都建立在这个模型上。

Browser 进程(主进程)
管窗口、地址栏、书签、下载、权限——唯一有「全局视野」的角色。它挂掉整窗都会关。
Renderer 进程(渲染进程)
每个站点(Site Isolation 下甚至每个跨站 iframe)一个,跑 Blink + V8,被沙箱限制到最小权限。
GPU 进程
负责合成与光栅化;崩溃时通常表现为页面黑块,刷新即恢复。
Network 服务
统一处理网络请求、Cookie、缓存,避免每个渲染进程各自直连网络。
Firefox 的对应机制叫 Fission(站点隔离),Safari 用 WebContent 进程。名字不同,思路相同:把不可信的网页代码关进单独的、权限受限的进程。
6

国产「双核浏览器」是怎么回事

360、QQ、搜狗等国产浏览器长期宣传「双核」:一个 Chromium 核跑现代网页,一个 IE 核(Trident)应付只兼容 IE 的老系统—— 网上银行、政务系统、老 OA 是主要场景。

  • IE 内核已于 2022-06-15 随 IE11 退役,双核里的「IE 模式」现在是各家用自有方案模拟兼容,不再等于微软支持。
  • Chromium 核也不是原封不动:厂商会加自己的壳(皮肤、工具栏、内置下载器、去广告),版本往往落后官方数个里程碑。
  • 判断某国产浏览器真实内核,最省事的办法是打开 chrome://version——能打开且显示 Chromium 版本号,基本就是 Chromium 系。
双核切换会带来 UA 变化与渲染差异。老系统能用不代表网页标准正确,长期看仍应推动迁移。
7

内核版本、Evergreen 与「你用的到底是哪一版」

Chromium 系采用「常青(Evergreen)」更新:内核版本大约每 4 周推进一个里程碑,浏览器自动升级。 这意味着同一个浏览器品牌,不同人的内核版本可能差好几个月,网页兼容问题的第一现场往往在这里。

想查什么怎么做
Chrome / Edge / Opera / Brave / Vivaldi / Arc 等 Chromium 系地址栏输入 chrome://version,看第一行版本号与「Blink」
Firefox / Waterfox / Tor Browser地址栏输入 about:support,看「版本」与「Gecko 版本」
Safari菜单「Safari 浏览器 → 关于 Safari」,或 about:blank 页面看版本
在网页里用脚本判断navigator.userAgentData(新)或 navigator.userAgent(老,仅作兜底)

UA 字符串会互相「伪装」:Chrome 的 UA 里含 Safari 字样,Edge 的 UA 里含 Chrome 字样。靠 UA 判断内核很容易错,优先用 userAgentData.brands 或直接特性检测。

8

内核与网页兼容性:怎么不被内核差异坑

同一份 HTML,在不同内核上的结果可以差很多。可控的做法不是「兼容所有浏览器的一切」,而是分层处理:

  • 先做特性检测,再写分支:if ('showOpenFilePicker' in window) 比判断品牌稳。
  • CSS 用 @supports,不要用浏览器前缀猜;前缀已经是历史遗留手段。
  • 查支持度:caniuse、MDN 的兼容表是事实标准来源;新 API 先做渐进增强,别当唯一路径。
  • 固定内核版本做回归:企业内网常有「锁版本」的浏览器,测试矩阵里要留一格。
Blink 与 WebKit 分叉已十余年,很多新 API 只在一边有。看到「Safari 不支持」不等于「WebKit 不支持」,但实际排障时按内核分支处理通常更快。
9

份额与趋势:为什么「兼容 Blink + WebKit」就覆盖了大多数

下面这张图来自 Wikimedia Commons 对浏览器使用份额的长期统计。它解释了一个现实:桌面与移动加起来, Blink 系与 WebKit 系吃掉了绝大多数流量,Gecko 是稳定的第三极,Trident 已归零。

2009 至 2024 年浏览器使用份额变化图
图 3 · 2009–2024 年浏览器使用份额变化。Wikimedia Commons,CC BY 4.0。
份额会随统计口径(页面浏览量 / 独立设备 / 地区)变化,看趋势比看某一个月的小数点更有意义。
10

五个常见误解

说法实情
「内核越多越好」多内核意味着多套渲染路径与更大的攻击面;双核是历史包袱的折中,不是先进设计。
「GPU 加速一定更快」合成与光栅化走 GPU 通常更快,但纹理上传、图层过多反而更慢;要看具体场景。
「Chromium 就是 Chrome」Chromium 是开源项目,Chrome 是 Google 在其上加品牌、同步与专有组件的发行版。
「UA 写着 Safari 就是 Safari」Chrome、Edge、国产 Chromium 浏览器的 UA 里都带 Safari 字样(历史兼容),不能据此判断。
「换内核就能解决卡顿」卡顿多半来自页面本身(脚本、布局、资源体积)与设备,内核只决定上限,不负责优化你的页面。

判断浏览器能力,永远优先看「它支持哪些特性」,而不是「它叫什么名字」。

11

延伸阅读

12

常见问题

为什么同一个网页在不同浏览器上排版不一样?
因为三个层面都可能不同:内核实现差异(同一 CSS 特性的默认值、边界情况)、字体与渲染策略差异、以及浏览器自带的阅读模式/翻译/广告拦截对页面的改写。排查顺序建议:先确认内核版本 → 再看是否被扩展或省流模式改写 → 最后才怀疑网页本身。
Edge 换了 Blink,和我用 Chrome 有什么区别?
渲染结果基本一致(同一个内核),差别在浏览器外壳与服务:账号体系(微软 vs Google)、内置功能(垂直标签、睡眠标签、Copilot)、隐私默认值与同步策略。网页兼容性上基本可以互相当作对方。
手机上的浏览器内核和电脑一样吗?
系统限制决定差异:iOS / iPadOS 上所有浏览器都必须使用系统提供的 WebKit(第三方浏览器只能做外壳);Android 上则可以自带 Chromium 或 Gecko。所以「手机上所有浏览器都一样」只在 iOS 上接近成立。
内核版本落后会有什么实际风险?
两类:安全(已修补的漏洞在你这里仍可利用)与兼容(新 CSS / JS 特性不可用,网页退化甚至白屏)。企业内网锁版本时,建议至少把安全补丁跟到厂商支持的版本线。
怎么判断一个陌生的国产浏览器是不是 Chromium 套壳?
看三处:能否打开 chrome://version、扩展是否兼容 Chrome 扩展、开发者工具的界面是否与 Chrome DevTools 同构。三条都成立,基本就是 Chromium 派生。
「WebKit 和 Blink 都是 Chromium」这种说法对吗?
不对。Chromium 项目使用 Blink;WebKit 由 Apple 主导,服务于 Safari。两者同源于 KHTML/WebKit,但 2013 年分叉后已经独立演进十余年。
把本页转给朋友(短码 N5F3My,回流可归因)