什麼是 Blink?

網路的其中一個特殊能力,就是可組合性。網頁包含各種資源,可能來自多個來源。

Blink 是 Chromium 瀏覽器的轉譯引擎,包括 Chrome、Android WebView、Microsoft Edge、Opera 和 Brave。

轉譯引擎是網頁瀏覽器的元件,可將 HTML、CSS 和 JavaScript 程式碼,以及圖片和其他資源轉換為可供查看及互動的網頁。

Blink 會收集所有必要資源 (例如 HTML、CSS、JavaScript、影片和圖片),開始轉譯程序。為了擷取這些資源,Blink 會在 Chromium 和基礎作業系統中管理與網路堆疊的互動。

載入 CSS 和 HTML 後,Blink 即可將程式碼轉換為文字形式,並轉換成可用的表示法,這稱為「剖析」。也需要剖析 JavaScript 並執行。

完成所有這些步驟後,Blink 就會開始進行版面配置和顯示網頁的工作,讓您可以查看及互動。這就是轉譯

下圖顯示轉譯工作管道中的各個階段,包括各階段涉及的元件、程序和資源。Blink 有許多工作要做!

Blink 轉譯管道,箭頭表示各階段的進度。
Blink 轉譯管道包含資源載入器、指令碼 API 和 HTML/CSS 剖析。這會經過多個階段,最終在螢幕上繪製像素。

算繪圖形

Blink 會使用開放原始碼 Skia 圖形引擎,與電腦或行動裝置的底層圖形硬體互動。

Skia 提供可在各種硬體和軟體平台上運作的通用 API。它是 Google Chrome 和許多其他產品的圖形引擎。

為了因應平台變更,Skia 使用圖形程式庫 (包括 OpenGLVulkanDirectX),而非嘗試支援不同的作業系統和裝置。Skia 使用的程式庫取決於執行的平台,例如行動裝置上的 Android 或電腦上的 Windows。

剖析及執行 JavaScript

為了剖析及執行 JavaScript 和 WebAssembly 程式碼,Blink 會使用 V8,這是由 Chromium 專案開發的開放原始碼引擎。

V8 可讓開發人員使用 JavaScript 或 WebAssembly 程式碼存取底層瀏覽器的功能。例如:用於操作Document Object Model,這是 Blink 從 HTML 程式碼建構的文件內部表示法。

V8 會根據 JavaScript 標準 (稱為 ECMAScript) 處理 JavaScript。

依標準算繪

V8 會依據 JavaScript 標準 (稱為 ECMAScript) 處理 JavaScript。Blink 等轉譯引擎的設計目的,是為了以互通方式實作網路標準。無論使用哪種瀏覽器,開發人員和使用者都能確保網頁運作良好,這要歸功於網路標準。

Blink 遵循網路標準中定義的瀏覽器和語言功能規格,包括 HTMLCSSDOM

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 是描述功能介面的標準化方式,例如構成大多數網頁標準的介面。

為了實作功能,工程師會將 WebIDL 程式碼放入檔案,而 Blink 會自動將該檔案轉換,為開發人員提供該功能的介面。使用 WebIDL 定義介面後,工程師就能建構可回應介面呼叫的實作項目。

html_image_element.idl 在 Chromium 原始碼中。

第三方程式庫

Blink 會使用多個第三方程式庫。舉例來說,WebGL 可用於算繪互動式 2D 和 3D 圖形。

Chromium 來源中的第三方程式庫,包括 Blink 使用的 WebGL。

WebGL 等程式庫經過高度最佳化及仔細測試。讓 Blink 可以存取重要功能,而無需重新發明輪子。WebGL IDL 已定義,Blink 工程師將該網頁介面連結至後端的程式碼和程式庫,用於轉譯許多不同的元素。

如要查看 WebGL 的實際運作情形,請試試使用 WebGL 的 Fractious 分形算繪應用程式。

Fractious:這是以 WebGL 為基礎的 Mandelbrot 集檢視器。

跨平台轉譯

您可能會想知道,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、Arc、Brave 和其他採用 Chromium 的瀏覽器和架構都使用 Blink。Safari 和其他一些瀏覽器都會使用 WebKit,包括 iOS 和 iPadOS 上的所有瀏覽器 (包括 Chrome)。Firefox 使用名為 Gecko 的轉譯引擎。

後續步驟

請參閱「什麼是 Blink 意圖?」一文。