聊聊Firefox Preview 背後的渲染引擎GeckoView
Mozilla現已推出面向Android的全新移動瀏覽器FirefoxPreview。與大多數瀏覽器所採用的Bink渲染引擎不同,Firefox Preview的渲染引擎GeckoView由Mozilla自己開發,這種獨立性一定程度上避免了互聯網被單一的科技巨頭控制。
根據Mozilla工程師的介紹,他們開發GeckoView的原意是希望將Firefox的渲染引擎作為一個可重用庫引入Android平台。
通過將 GeckoView 引擎與Firefox 應用程序相分離,開發團隊創建了一種更新、更快和更容易維護的方式來開發Android 應用程序。這種方法利用了Gecko 卓越的性能、隱私和對最新Web 標準的支持。
下面我們不看看關於 GeckoView 的一些介紹和應用案例。
背景
我們都知道Android系統提供了內置的WebView,應用程序可通過hook的方式以在app的上下文中顯示網頁。不過Android的WebView並非真正用於構建瀏覽器,所以它禁用了許多高級Web API。另外,它的目標平台也不是統一的,不同的手機可能有不同版本的WebView。
在這樣的背景下,GeckoView 誕生了。
功能
作為一個渲染引擎,GeckoView 提供了完整的功能:
- 功能齊全:GeckoView旨在通過簡單的API向應用程序暴露Web的全部功能。可以把它想像為利用了Gecko(支持Firefox的引擎)的全部功能,而它的API類似於WebView並且易於使用。
- 適用於應用程序和瀏覽器:GeckoView特別適合構建移動瀏覽器,同時可以把它作為Web引擎組件嵌入到任何類型的應用程序中。
- 自包含:GeckoView是一個與應用程序捆綁在一起的獨立庫。
- 符合標準:與Firefox一樣,GeckoView為現代Web標準提供了出色的支持。
使用GeckoView 的其他項目
Mozilla 在許多其他的產品都使用了GeckoView,列舉幾個如下(除Firefox Preview 外)。
Focus 的簡潔性有助於進行實驗測試,Mozilla 目前正利用它在GeckoView 和Android 的內置WebView 之間進行隔離測試。這有助於確保GeckoView 的穩定性和性能。
雖然Firefox Focus 十分出色,但它不是一款通用的瀏覽器。設計之初它就不會跟踪歷史記錄和書籤,也不支持WebRTC 等API。
和Firefox Preview 一樣,Reference Browser 也是一款使用GeckoView 引擎和Mozilla Android 組件構建的完整瀏覽器。不過它不是面向普通用戶推出,其目標受眾是瀏覽器開發者。事實上,Reference Browser 更像是一個“試驗基地”,用來測試GeckoView 和組件是否合適並按預期運行—— 並不受市場產品的限制。
這是一款專為獨立虛擬現實頭戴設備而設計的瀏覽器。除了利用Gecko 對沉浸式網絡技術的出色支持外,Firefox Reality 還展示了GeckoView 的多功能性。
雖然 Firefox for Android (“Fennec”)不使用GeckoView進行渲染,但它使用GeckoView來提供對Progressive Web Apps和Custom Tabs的支持。此外,由於GeckoView和Fennec都基於Gecko,因此他們都受益於這個通用基礎架構的改進。
Mozilla 將GeckoView 視作為Mozilla 下一代移動產品的基礎。為了更好地支持這一未來,他們已停止 Firefox Focus 的開發,以將精力集中在GeckoView 的開發上。
過去六個月,Mozilla 對GeckoView 的內部進行了許多改進,特別是在編譯器級優化和對其他CPU 架構的支持方面。亮點包括:
- 現已啟用 Android上的配置文件引導優化(PGO),使得編譯器通過實際運行和觀察GeckoView收集的數據來生成更高效的代碼。
- IonMonkey JavaScript的JIT編譯器已面向GeckoView的64位ARM架構啟用
- 現在正在為x86_64 架構生成GeckoView 的構建
實現這些功能除了滿足在Google Play 的上架要求外,支持64 位架構還可以進一步提高GeckoView 的穩定性(減少內存崩潰)和安全性。
對於即將發布的Firefox Preview 版本,Mozilla 正致力於支持Web 推送和“添加到主屏幕”等。