Web 的一大优势是可组合性。网页包含各种不同的资源,这些资源可能来自多个来源。
呈现引擎是网络浏览器的组件,用于将 HTML、CSS 和 JavaScript 代码以及图片和其他资源转换为您可以查看和与之互动的网页。
Blink 是 Chromium 项目的一部分,可用作基于 Chromium 的浏览器(包括 Chrome、Android WebView、Microsoft Edge、Opera 和 Brave)的渲染引擎。
Blink 如何呈现网页?
Blink 会收集所有必要的资源(例如 HTML、CSS、JavaScript、视频和图片),以便开始呈现流程。为了检索这些资源,Blink 会管理 Chromium 和底层操作系统中与网络堆栈的互动。
一旦 CSS 和 HTML 加载完毕,Blink 便可将该代码(以文本形式)转换为可与之搭配使用的表示法,这称为解析。JavaScript 还需要经过解析,然后才能执行。
完成所有这些工作后,Blink 便可以开始布局和显示您可以查看和与之互动的网页。这就是渲染。
下图展示了渲染任务流水线中的各个阶段,包括每个阶段涉及的组件、进程和资源。Blink 还有许多工作要做!

渲染图形
Blink 使用开源 Skia 图形引擎与计算机或移动设备的底层图形硬件进行交互。
Skia 提供可在各种硬件和软件平台上运行的通用 API。它是 Google Chrome 和许多其他产品的图形引擎。
Skia 使用图形库(包括 OpenGL、Vulkan 和 DirectX),而不是尝试在跟上平台变化的同时支持不同的操作系统和设备。Skia 使用的库取决于其运行的平台,例如移动设备上的 Android 或桌面设备上的 Windows。
解析和执行 JavaScript
为了解析和执行 JavaScript 和 WebAssembly 代码,Blink 使用 V8,这是一个由 Chromium 项目开发的开源引擎。
借助 V8,开发者可以使用 JavaScript 或 WebAssembly 代码来访问底层浏览器的功能。例如:操控文档对象模型(即 Blink 基于 HTML 代码构建的文档的内部表示)。
V8 会根据 JavaScript 标准(称为 ECMAScript)处理 JavaScript。
按照标准进行渲染
V8 会根据 JavaScript 标准(称为 ECMAScript)处理 JavaScript。Blink 等渲染引擎旨在以互操作的方式实现 Web 标准。借助 Web 标准,开发者和最终用户可以放心,无论他们使用的是哪款浏览器,网页都能正常运行。
Blink 遵循 Web 标准(包括 HTML、CSS 和 DOM)中定义的浏览器和语言功能规范。
HTML 和 DOM
HTML 标准定义了浏览器工程师应如何实现 HTML 元素。每个 HTML 元素的规范都包含一个部分,用于定义该元素的 DOM 接口。本文详细介绍了浏览器应如何实现 JavaScript,以便以跨设备和平台标准化的方式与元素互动。
接口规范采用 WebIDL(Web 接口定义语言)编写。以下 WebIDL 是 HTML 标准对 HTMLImageElement
的定义的一部分。
[Exposed=Window,
LegacyFactoryFunction=Image(optional unsigned long width, optional unsigned
long height)]
interface HTMLImageElement : HTMLElement {
[HTMLConstructor] constructor();
[CEReactions] attribute DOMString alt;
[CEReactions] attribute USVString src;
[CEReactions] attribute USVString srcset;
[CEReactions] attribute DOMString sizes;
[CEReactions] attribute DOMString? crossOrigin;
[CEReactions] attribute DOMString useMap;
[CEReactions] attribute boolean isMap;
[CEReactions] attribute unsigned long width;
[CEReactions] attribute unsigned long height;
readonly attribute unsigned long naturalWidth;
readonly attribute unsigned long naturalHeight;
readonly attribute boolean complete;
readonly attribute USVString currentSrc;
[CEReactions] attribute DOMString referrerPolicy;
[CEReactions] attribute DOMString decoding;
[CEReactions] attribute DOMString loading;
[CEReactions] attribute DOMString fetchPriority;
Promise<undefined> decode();
// also has obsolete members
};
WebIDL 是一种标准化的方法,用于描述功能接口,例如构成大多数 Web 标准的接口。
如需实现某项功能,工程师会将该 WebIDL 代码放入文件中,Blink 会自动对其进行转换,以便向开发者提供该功能的接口。使用 WebIDL 定义接口后,工程师可以构建响应接口调用的实现。

第三方库
Blink 使用多个第三方库。例如,WebGL 用于渲染交互式 2D 和 3D 图形。

WebGL 等库经过了高度优化和仔细测试。借助这些组件,Blink 可以使用重要功能,而无需重新发明轮子。定义了 WebGL IDL,Blink 工程师将该 Web 接口与后端上用于渲染许多不同元素的代码和库相关联。
如果您想了解 WebGL 的实际运作方式,请查看使用 WebGL 的碎形渲染应用 Fractious。

Chrome 与 Chromium
Chrome 基于 Chromium 构建。事实上,您可以下载并运行 Chromium 作为独立浏览器。不过,Chrome 在 Chromium 的基础上添加了一些重要功能。
例如:
- Chrome 添加了用于解码音频和视频文件的专有软件,称为编解码器。
- 在用户允许的情况下,Chrome 可以向其工程团队报告错误。
- Chrome 提供多项使用 Google 账号的用户代理功能,例如密码管理、共享历史记录、书签等。
- Chrome 会自动下载更新。
- Chrome 实现了 Chrome DevTools,可让您直接在浏览器中进行测试、调试和实验。
Chrome 还会通过其发布渠道(即 Chrome Canary、Chrome 开发者版、Chrome Beta 版和 Chrome 稳定版)接受额外的严格测试流程。
如需了解构建浏览器需要付出多大努力,请访问 chrome://credits 页面。目前,该网站列出了 Chrome 使用的 500 多项技术和项目。

跨平台渲染
您可能想知道,Chrome 是否在所有操作系统和设备上都使用 Blink?
在 iOS 和 iPadOS 上,Chrome 使用 WebKit 作为其渲染引擎。WebKit 实际上是另一个项目 KDE 的分支,后者的历史可以追溯到 1998 年。事实上,Safari 和 Chromium 最初都是基于 WebKit 的。根据 Apple 的 App Store 要求,目前 Safari 和 Apple 生态系统中的所有浏览器都使用 WebKit
随着时间的推移,Chromium 项目开发了不同的多进程软件架构,因为在一个代码库中维护两个单独的架构变得越来越有问题。
此外,Chromium 还希望使用 WebKit 中未内置的功能。因此,从 28 版开始,Chromium 工程师决定开始开发自己的渲染引擎。他们从 WebKit 分叉了代码,并将其命名为 Blink。有传言称,Blink 的命名源自 Netscape Navigator 浏览器中用于使文本闪烁开关的(不太受欢迎的)<blink>
标记。
总而言之:Chrome、Microsoft Edge、Opera、Vivaldi、Brave 以及其他基于 Chromium 的浏览器和框架都使用 Blink。Safari 和某些其他浏览器使用 WebKit,iOS 和 iPadOS 上的所有浏览器(包括 Chrome)也使用 WebKit。Firefox 使用名为 Gecko 的渲染引擎。