什么是浏览器内核,Blink、Gecko 和 WebKit 有何区别?看看你的浏览器究竟用哪种引擎,以及为何 user-agent 会说谎。
浏览器内核是浏览器内部的一套软件,它把页面的 HTML、CSS 和 JavaScript 转化为你看到的像素和体验到的行为。如今三大引擎几乎支撑起整个网络:Blink(Chrome、Edge 以及大多数其他浏览器)、Gecko(Firefox)和 WebKit(Safari 以及 iOS 上的每一款浏览器)。你使用的是哪一种,决定了网站如何渲染、哪些功能可用,以及你有多容易被识别——而那个声称要告诉你答案的 user-agent 字符串,其实可以伪造。本文将逐一讲解每种引擎、它们之间的关系,以及如何查出你真正在用的那一个。
什么是浏览器内核?
浏览器内核——也称渲染引擎或排版引擎——是读取网页代码并把它布局到屏幕上的组件。当你打开一个页面时,引擎会把 HTML 解析成文档树,应用 CSS 来设置样式和定位,再把结果绘制出来。它还会与一个独立的 JavaScript 引擎协同工作,由后者执行页面的脚本。
这两个部分常被混淆。以 Chrome 为例,Blink 是渲染引擎,V8 是 JavaScript 引擎,而 Chromium 则是把它们打包成浏览器的开源项目。Firefox 把 Gecko(渲染)与 SpiderMonkey(JavaScript)搭配在一起;Safari 则把 WebKit 与 JavaScriptCore 搭配在一起。当人们说「浏览器内核」时,通常指的是渲染引擎,因为正是它决定了页面看起来是什么样子。
Blink(Chrome、Edge 以及大多数浏览器)
Blink 是谷歌的渲染引擎,使用范围遥遥领先于其他引擎。它驱动着 Chrome、Microsoft Edge、Opera、Brave、Vivaldi 以及众多其他基于 Chromium 的浏览器——合计占据了桌面浏览的绝对多数,大约四分之三的市场份额。
Blink 以快速的 JavaScript 性能(得益于 V8)、迅速的功能上线和广泛的网络平台支持著称,因此开发者往往优先针对它进行测试。这种主导地位的代价是引擎多样性的减弱:当一个引擎掌控了大部分网络,它的怪癖和决策实际上就成了事实标准,无论正式规范是否认同。
Gecko(Firefox)
Gecko 是 Mozilla 的开源渲染引擎,由 Firefox 及其衍生版本使用。它的市场份额很小——大致只有个位数——但作用却举足轻重:Gecko 是桌面端主要的独立、非 Chromium 引擎,因此它让网络免于沦为单一引擎的垄断格局。
Gecko 注重网络标准与隐私,而 Mozilla 的「Quantum」大改造则让它的性能和并行能力焕然一新。对开发者来说,在 Gecko 中测试是发现网站是否不慎依赖了 Blink 专属行为的最可靠方法。
WebKit(Safari 与所有 iOS 浏览器)
WebKit 是苹果的引擎,由更早的 KHTML 引擎发展而来。它驱动着 macOS 和 iOS 上的 Safari,并针对苹果硬件做了优化,强调省电与稳定。在桌面端它的份额不大,但在移动端却非常庞大,原因在于一条关键规则。
在 iOS 和 iPadOS 上,每一款浏览器都必须使用 WebKit——包括 iPhone 上的「Chrome」和「Firefox」。这些应用包裹的是苹果的 WebKit,而非搭载 Blink 或 Gecko,所以在 iPhone 上,无论你点开哪个浏览器图标,运行的始终是 WebKit。这正是同名的 iOS Chrome 与 Android Chrome 会渲染出不同结果的原因。
Blink、Gecko 与 WebKit——对比
| 引擎 | 开发者 | 大致份额 | 驱动的浏览器 | 以何著称 |
|---|---|---|---|---|
| Blink | 谷歌 | 桌面端约四分之三 | Chrome、Edge、Opera、Brave | 速度快、功能上线快、占主导 |
| Gecko | Mozilla | 个位数 | Firefox | 标准、隐私、引擎独立 |
| WebKit | 苹果 | 桌面端小、移动端大 | Safari、所有 iOS 浏览器 | 省电、稳定 |
务实的结论是:大多数「不同」的浏览器其实是同一个 Blink 引擎披着不同的外衣,而 Gecko 和 WebKit 才是仅存的两个真正独立的替代方案。
简史:KHTML → WebKit → Blink
这三种引擎的关系比表面看上去更密切。WebKit 始于 2001 年,当时苹果分叉了 KDE 项目的 KHTML 引擎来打造 Safari。多年来,WebKit 同时驱动着 Safari 和谷歌的 Chrome。后来在 2013 年,谷歌又分叉 WebKit 创建了 Blink,以便按自己的方式演进引擎。Gecko 则始终在 Mozilla(以及更早的 Netscape)独立发展。
所以 Blink 和 WebKit 拥有共同的祖先,这正是它们有时行为相似的原因,而 Gecko 则源自一条独立的血脉。
如何查出你的浏览器用的是哪种引擎
最快的方法是运行 BrowserInsight 的 浏览器内核检测,它会检测你的浏览器实际运行的渲染引擎,而不是轻信图标上的名字。这个区别很重要,因为 user-agent 字符串——浏览器用来标识自己的那段文字——可以被轻而易举地修改。一个浏览器完全可以自称是 Windows 上的 Chrome,实际上却是别的东西。
这正是引擎检测会越过 user-agent、直接审视引擎真实行为的原因:哪些网络 API 存在、某些功能如何实现,以及其他难以伪造的蛛丝马迹。如果你想了解这道缝隙是如何被利用和检测的,请看 如何检测 user-agent 伪装;如果想深入了解某个引擎专属信号,请看 显卡如何通过 WebGL 暴露你的身份。
常见问题
Microsoft Edge 用的是什么浏览器内核?
Edge 使用 Blink,和 Chrome 是同一个引擎。微软在 2020 年弃用了旧的 EdgeHTML 引擎,并基于 Chromium 重建了 Edge,因此如今 Edge 与 Chrome 渲染页面几乎一模一样;差异在于界面和内置服务,而非引擎。
iPhone 上的 Chrome 真的是 Chrome 吗?
从引擎意义上说不是。在 iOS 上,苹果要求每款浏览器都使用 WebKit,所以 iPhone 上的「Chrome」和「Firefox」只是套在苹果 WebKit 引擎之上的界面外壳。它们会同步你的数据、看起来也像桌面版应用,但真正负责渲染的是 WebKit,这正是页面行为可能与 Android 上不同的原因。
浏览器内核和 JavaScript 引擎有什么区别?
浏览器(渲染)引擎把 HTML 和 CSS 布局成你看到的样子;JavaScript 引擎则执行页面的脚本。它们协同工作,但属于各自独立的组件——Blink 搭配 V8,Gecko 搭配 SpiderMonkey,WebKit 搭配 JavaScriptCore。
我能更换浏览器的内核吗?
在普通浏览器里不能——引擎是内置的。你唯一现实的选择是更换浏览器:想要 Blink 就选 Chromium 系浏览器,想要 Gecko 就选 Firefox,想要 WebKit 就选 Safari。而在 iOS 上,这个选择被彻底取消了,因为所有浏览器都使用 WebKit。
结语
三种引擎——Blink、Gecko 和 WebKit——渲染了几乎整个网络,而你选哪款浏览器,在很大程度上就是在它们之间做选择。Blink 占据主导,Gecko 让网络保持独立,WebKit 则凭规则统治 iOS。知道自己实际运行的是哪种引擎,对兼容性和隐私都同样重要;而由于 user-agent 可能歪曲事实,唯一可靠的判断方式就是检测引擎的真实行为,而非轻信它的名字。
推荐阅读: