尋找「剛剛好」的瀏覽器:為什麼 Firefox 「恰到好處」(上)

多處理程序的 Firefox 不但速度絲毫不遜其他瀏覽器,也不像 Chrome 一樣有時會佔用太多用記憶體而拖慢電腦速度

今天,Mozilla 發表了新的多處理程序架構的 Firefox 。這是Firefox瀏覽器有史以來第一次能使用幾個不同的程序來執行網頁內容(分頁)。

或許你知道,其他的瀏覽器過去也曾這麼做過。也許你認為你了解多程序瀏覽器,又或許你不曾聽過,無論是哪一種情況,請繼續讀下去。

本文將說明 Firefox 採用多處理程序架構代表了什麼意義,以及為什麼Firefox 的多處理程序會異於 — — 以及優於別家的瀏覽器。

當我在思考如何解釋其中涉及的技術面時,我想起我常讀給女兒 Sara 聽的童話故事:《歌蒂拉和三隻熊》(Goldilocks and the Three Bears)。

「歌蒂拉原則」在網路瀏覽器的展現

在這個童話故事裡,歌蒂拉覺得熊爸爸的粥太燙了、熊媽媽的粥太冷,只有熊寶寶的粥的溫度「剛剛好」。這個凡事過猶不及、適度最好的概念便是所謂的「歌蒂拉原則」(Goldilocks principle)

天文學家在找適居的歌蒂拉星球(Goldilocks planet),Mozilla 則想要打造「歌蒂拉瀏覽器」。就我看來,在現在既有的瀏覽器中,還沒有一個在速度和記憶體用量之間達到「恰恰好」的平衡。

瀏覽器使用了多少的記憶體,不僅會影響到你的瀏覽器使用體驗,也會影響到電腦其他執行中應用程式的使用體驗。萬一你用的瀏覽器是記憶體怪獸,電腦剩下的記憶體可能就不足以跑其他的應用程式。事實上,如果瀏覽器吃掉太多記憶體,電腦可能會慢如牛步。

相反的,如果瀏覽器不佔用太多記憶體,它又可能無法做一些能讓瀏覽體驗又快又流暢的事情。若要符合歌蒂拉原則,一個「剛剛好」的瀏覽器就是使用了適量的記憶體 — — 足以跑得快,但又不至於消耗過多電腦資源。

網頁瀏覽器往往比其他應用程式佔用更多記憶體。如果瀏覽器用掉太多記憶體空間,電腦剩下的記憶體就會太少,而拖慢整台電腦運作的速度

應用程式的成分

熊媽媽的粥裡面有兩個成分:燕麥和奶粉。應用程式也有兩個主成分:處理程序(processes)和執行緒(threads)。

當你開啟應用程式,應用程式會啟動一個程序。此程序會啟動許多執行緒,每一個執行緒都共用同樣的工作記憶體。程序使用執行緒來處理具不同優先順序的不同種類的工作。舉例來說,高度優先的執行緒可能負責繪製程式的使用者介面,因此,瀏覽器知道這一點,而會快速回應滑鼠的點擊或鍵盤的輸入動作。另一個優先性較低的執行緒則可能在背景計算資料。如果你想了解電腦上正在運行的程序,你可以打開「工作管理員」(Windows)或「活動監視器」(macOS)。

有些時候,在執行需要大量記憶體和運算資源的工作,或基於系統安全和穩定考量而須隔離處理的工作時,應用程式的處理程序不會啟動新的執行緒,而會啟動新的程序。

大部分的應用程式都只執行單一的程序及多個執行緒。但是,網路瀏覽器不是大部分的應用程式。

溫暖又順口:適合現代網路的多程序瀏覽器

自2004年推出 Firefox 後,Mozilla 和社群便一直把推動 Web 功能發展視為核心職志。逐步且踏實地,Web 成為了平台 — — 不只是容納靜態文件,也是包含電子郵件、文字處理和社群網站等互動應用的平台。

歡迎來到 Web 2.0 世代!

儘管新的 web 世代極其美好,但是,Firefox 和其他種種瀏覽器同時執行多個 web 應用的速度,卻仍遠遠落後於 OS 執行原生應用的速度。這問題怎麼解決?瀏覽器的運作方式必須更像 OS ,也就是使用多個處理程序來執行 web 應用。

在多處理程序的架構裡,你可以在一個分頁內流暢地使用網頁,同時間,其他幾個分頁還能執行別的網頁內容。過去,Mozilla 工程師雖然了解此新型多程序架構的可行性,但把 Firefox 改為多程序架構卻意味著必須破壞仰仗單程序架構運作的Firefox 附加元件(Add-On)。由於考量到許多使用者都喜歡運用附加元件客製出個人化的 Firefox , Mozilla 起初不願意踏出這一步。想到要把 Chrome 設計為多程序瀏覽器的人值得佩服。

「電解」(Electrolysis)登場:Mozilla 把Firefox 改為多處理程序的努力

我們花了很長的時間,才研究出能讓 Firefox 既支援附加元件,又能讓其運作與多程序架構和平共存的方式。最後,Mozilla 投入兩個相關的計畫:(1) 把 Firefox 分割為多重處理程序的「電解」(Electrolysis)專案;以及 (2) 把傳統的附加元件轉為跨瀏覽器的擴充元件(WebExtensions)。兩項計畫都是大工程。

2016年8月,Mozilla 推出 Electrolysis 的第一期計畫成果,把 Firefox 執行 UI 和網頁內容(分頁裡的頁面)的程序一分為二。現在,Firefox 正式釋出 Electrolysis 的下一期成果,大幅度地增加Firefox 執行和保護網頁內容時使用到的程序,並同時加強程序的管理,以改善效能、穩定度和記憶體使用量。這些新增的程序可能跨不同運算核心來運作,故可大幅減少網頁之間彼此影響或瀏覽器的整體效能下降的可能性。萬一其中一個內容處理程序真的當機時,其他內容程序和其所呈現的網頁也完全不受衝擊。

這麼做的好處是,現在的 Firefox 比過去跑得更快、更穩定。

原文連結

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.