Android 版 Chrome 捲動 Lag 激減 48%,公開背後技術

Chrome for Android

相信大家都有過呢種崩潰體驗:用電話睇緊網頁上的長篇文章,手指一直向下掃,畫面突然窒一窒或者跳格,確實破壞手機上網嘅體驗。

雖然 Android 系統早前已經刷新紀錄,成為最快嘅行動網頁瀏覽平台,但要造就完美嘅用戶體驗,單靠快係唔夠嘅。早喺 2023 年,Google 團隊就想徹底消滅捲動卡頓嘅根源。經過多年嘅努力,由 2023 年至 2026 年間,Android 版 Chrome 嘅捲動卡頓頻率,已經成功大幅減少 48%!。Chrome 團隊最近就在 Chromium Blog 分享這些改進背後的技術進程。


穩定性行先

點解畫面會窒?簡單嚟講,當手機未能準時運算出新一格 (Frame) 嘅捲動位置並顯示出嚟,卡頓就會發生。

Chrome 內部有一條極度嚴格嘅死線:佢必須喺螢幕下一次刷新之前,將每一格畫面準備好交貨。如果處理過程有任何延遲、過咗呢條死線,螢幕就唯有硬食,繼續顯示上一格嘅舊畫面,直到下一個刷新週期 (以 60Hz 螢幕為例,大概係 16.7 毫秒) 。

人類嘅肉眼非常敏感,呢啲跌 Frame落喺我哋眼中,就會變成你感覺到嘅窒機跳格。要避免呢種情況,Chrome 由接收你手指滑動嘅指令,到將畫面顯示出嚟嘅時間必須極度穩定 —— 每一次捲動更新嘅處理時間都要一模一樣


Chrome 比一般 App 更難?

要顯示捲動動畫需要啲咩基本元素:

  1. 觸控指令 (Input events) :話畀個 App 知你隻手指喺螢幕邊個位,等佢計算出新嘅捲動位置。
  2. VSync 訊號 (垂直同步) :就好似手機嘅節拍器,由作業系統每個刷新週期發出一次,精準話畀個 App 知夠鐘準備下一格畫面喇。
👉 延伸閱讀:  Google Chrome 146 設定頁面煥然一新!採用 Material 3 Expressive 設計

普通嘅 Android App 會喺同一個 Thread 入面,同時接收觸控指令同 VSync 訊號,然後直接整出新畫面,乾脆俐落。

但 Chrome 嘅架構複雜得多!佢採用咗 Multi-process 模型,將瀏覽器、渲染同圖像處理分開獨立運作。呢個做法雖然大幅提升咗穩定性、安全性同整體效能,但同時令底層運算變得極度轉折:

  • 當你隻手指掂到螢幕,硬體產生嘅觸控指令唔會只係去一個 Thread 或者一個 Process。佢首先會入去 Browser Process 做點擊測試 (Hit testing) ,然後再 Pass 畀 Renderer Process 去計出新嘅捲動偏移量。
  • 另一邊廂,VSync 訊號就行緊另一條路。佢會先到達 GPU Process 裡面嘅 Viz 合成器,再傳送畀 Renderer Process。Renderer Process 收到之後,先會將佢同啲觸控指令相認並畫出新一格。
  • 畫好嘅新一格畫面,又要交返畀 GPU Process 去生成像素放入 GPU Buffer (緩衝區) ,最後先由 OS 顯示上個 Mon 度。
👉 延伸閱讀:  Google 預覽 Gemini Nano 4:更強、更快,還能幫你省電 60%

Chrome 會直接從硬體接收觸控訊號。即係話,你手指嘅動作會以唔規則嘅頻率瘋狂傳入 Chrome,甚至喺一個刷新週期入面彈出好多次,令到成個對齊過程難上加難。


團隊透過全面為 Chrome 嘅觸控至渲染管線進行數據監測:

  1. 分析追蹤日誌,搵出導致捲動卡頓嘅底層罪魁禍首,再度橋策劃專案去解決。
  2. 實裝呢啲改進專案,並透過 A/B 測試喺真實環境中運行。
  3. 嚴格對比效能指標,一旦證實測試能成功減少卡頓,就向 100% 嘅用戶全面推送。
  4. 重複以上步驟,逐一解決所有效能樽頸。

站長精選 你可能感興趣的 Android 密技: