近日,Chrome 開發者 David Bienvenu 在其名為《The Fast and the Curious》系列新博文中,詳細“揭祕”了谷歌最近對 Chrome 瀏覽器所做的一些改進。其中,就包括了谷歌歷時 3 年研究建立的 Native Window Occlusion(原生視窗遮擋)專案,可讓瀏覽器啟動速度提升 25%。
據悉,該博文裡解釋了谷歌為減少 Chrome 中不可見標籤和視窗資源消耗所做的工作。谷歌方面稱,該操作讓 Chrome 的啟動速度提高了 25.8%,崩潰次數減少了 4.5%。
該“揭祕”博文還指出,谷歌公司多年來一直在研究怎麼更好地確定哪些 Chrome 視窗和選項卡對使用者可見,以便能夠適當地分配系統資源。
我們知道,不在焦點的選項卡(又稱為“背景選項卡”)可降低 CPU 和 GPU 資源的優先順序,但被遮擋的視窗(即開啟的視窗,但完全或部分被其他視窗覆蓋的視窗)又如何呢?
對於這個問題,Bienvenu 在博文中寫道,谷歌方面瞭解到“20% 的 Chrome 視窗完全被其他視窗覆蓋,也就是完全被遮擋。如果這些被遮擋的視窗被視為背景標籤,那麼我們的假設就將看到顯著的效能優勢。”
於是,谷歌公司便對“Native Window Occlusion”(原生視窗遮擋)專案展開研究,該專案將允許谷歌瞭解任何開啟的 Chrome 視窗的遮擋狀態。當然,要想弄明白這一點,他們還必須得知道非 Chrome 瀏覽器視窗的位置,但這就不是 Windows 作業系統所能提供的資訊了。
考慮到多監視器設定和虛擬桌面等因素,以上問題變得更加棘手。
為了解決該問題,谷歌提出了“occlusion calculation(遮擋計算)”方案,它能在 UI 的單獨執行緒中執行,先計算使用者的總可見區域,再從虛擬桌面的可見區域中減去所有字作為“遮擋”的 Chrome 視窗,從前到後檢查每個開啟的視窗,最後再從總數中減去任意開啟的視窗。
如果是 Chrome 視窗,則會檢查其區域是否與未被遮擋的區域重疊;如果非 Chrome 視窗,就意味著 Chrome 視窗完全被以前的視窗覆蓋即遮擋。此時,軟體會一直執行計算,直到所有的 Chrome 視窗都被標記為遮擋,這意味著剩下的部分必須對使用者可見。有了這些資訊之後,再向計劃程式釋出一個任務,以提升瀏覽器視窗的可見性。
谷歌通過評估隱藏視窗提高 Chrome 效能
有了上面的解決方案,谷歌又提出了一個有趣的問題,“我們希望能多久執行一次計算?”
對於這個問題,Bienvenu 也在博文中做了解答。他表示,持續執行會降低效能,因此必須是選擇性的執行。
好在 Windows 系統允許應用程式跟蹤移動及調整開啟視窗大小之類的事件,所以 Chrome 會連線到這些通知中,當使用者移動或調整視窗大小時,Chrome 會發出警報,並決定是否進行新的遮擋計算。
Bienvenu 博文中還指出,該計算是在 16ms 計時器上執行的,該計時器對應每秒顯示 60幀(FPS)的間隔。
據瞭解,早在 2020 年 10 月谷歌就面向全部 Chrome 使用者推出了這一方案。如今已經過去了一段時間,谷歌也對外分享了以上“實驗”的結果。其中包括:
- 啟動速度加快 8.5% 至 25.8%
- GPU記憶體使用率降低 3.1%
- 整體繪製的渲染器幀減少 20.4%
- 遇到渲染器崩潰的客戶端減少 4.5%
- 首次輸入延遲提高 3.0%
- 首次內容繪製和最大內容繪製速度提高 6.7%
能成功做到上面這些,也是因為谷歌準確地意識到 Chrome 視窗何時被遮擋或完全被其他視窗遮擋的問題。如果你也正在使用 Chrome瀏覽器的話,現在就可以開啟感受一下視窗啟動的速度哦!