減少 Chrome 的記憶體用量是這個團隊今年的首要任務之一。我們發現 V8 的垃圾收集程序改善了高達 45% 的記憶體用量,但這才才剛開始。下一項記憶體用量實驗是針對像我一樣的分頁愛好者 (例如我本人)。這就是「分頁捨棄」功能。
在 Chrome 46 以上版本中,你可以使用分頁捨棄功能做為實驗。
背景
雖然多數人一次只使用一個分頁,但每個開啟的分頁通常每個分頁大約會佔用 50 MB 左右。如果開啟 10 個分頁,其中至少會耗用 450 MB 的記憶體,以便保留背景分頁狀態。這可能會隨著時間而變得不太穩定。
我們的目標之一,是減少目前「並未」使用的分頁佔用的記憶體。如果我查看哪些分頁佔用 Chrome 工作管理員中的系統記憶體,我其實只「使用」下方的其中一兩個網站,背景中的其他分頁則未使用。
這時分頁捨棄功能有助於降低記憶體用量。
捨棄未使用的分頁
Chrome 偵測到系統記憶體不足時,會自動捨棄分頁捨棄功能。「捨棄」是什麼意思?呃...捨棄的分頁不會消失。因此已終止,但仍會顯示在 Chrome 分頁列上。如果返回已捨棄的分頁,系統會在您點擊後重新載入該分頁。表單內容、捲動位置等項目的儲存和還原方式與往前/返回分頁瀏覽時相同。
此外,我們也提供一項新功能,可在本機快取所有分頁資源,這項功能在離線狀態下可順暢地捨棄分頁。重新啟用該分頁後,您可以選擇重新載入先前透過網路載入的快取版本。如要啟用從快取重新載入頁面的功能,您可以嘗試 chrome://flags/#show-saved-copy
底下的其他實驗。
今天透過 chrome://flags/#enable-tab-discarding
啟用分頁並重新啟動 Chrome,即可試用捨棄分頁功能。您可以透過同一個 Chrome chrome://flags
頁面啟用或停用這項功能。
名為 chrome://discards
的新頁面可讓您列出目前開啟的分頁,並嘗試分享一些關於您覺得有趣 (我們認為) 的深入分析資訊。
如要測試這項功能,您可以等到系統處於低記憶體模式後再執行一般瀏覽行為,也可以按一下「立即捨棄分頁」,讓分頁從「about:discards」觸發。這項操作會捨棄清單中的最後一個分頁。也可以按一下對應的「捨棄」按鈕,從清單中捨棄特定分頁。捨棄的分頁會顯示 [已捨棄] 前置字元。
按以下順序捨棄分頁:
- 內部頁面,例如新分頁、書籤等。
- 很久以前選取的分頁
- 最近選取的分頁
- 在視窗中執行的應用程式
- 固定分頁
- 選取的分頁
我們已經在 Windows 和 Mac OS 版 Chrome Canary 中啟用分頁捨棄實驗功能,不久後也會推出 Linux 實作實驗。
靈感:哈囉,氣派大使
如果您覺得分頁捨棄功能聽起來很熟悉,那是因為您可能已經發現了實用的 Chrome 擴充功能,可以稍微簡化這個構想,例如「The Great Suspender」。大停權器旨在透過在自訂閒置時間後暫停分頁,藉此減少 Chrome 的記憶體和 GPU 用量。
與分頁捨棄功能類似,需要再次互動時,分頁也可以解除停權。優秀的 Suspender 會維持每個分頁的標題和網站小圖示,以暗色顯示暫停的分頁,使它隨時都能直接返回,以便隨時返回。
我目前未使用的背景分頁已暫停,節省記憶體。我目前仍在使用 (GitHub 和 YouTube) 的分頁,但這些分頁仍會照常運作。
事實上,我們一邊開發分頁捨棄功能,一邊與 Great Suspender 擴充功能的作者聊天,很開心看到我們原生處理此問題的方式比擴充功能更有效,例如失去使用者的實際狀態。
未來改善項目:分頁序列化程式
定位器序列化程式是未來的開發成果,我們認為目前可大幅改善目前分頁捨棄方法的效率。它會接收 Chrome 分頁的內容,並將其「目前」狀態序列化為二進位 blob。這個二進位 blob 稍後可以反序列化為分頁。
序列化程式會將幾乎所有 Chrome、Blink 和 V8 的分頁序列化,需要妥善保留分頁 (一些 Chrome 擴充功能一直無法輕易解決這個問題)。序列化通常會有幾項常見的疑慮:DOM (內含大量 WebGL 和 Canvas)、CSS 和 V8 JavaScript VM 狀態。
如果您使用 Android 或 ChromeOS,您可能已經知道 (類似本文提到的分頁捨棄實驗) 我們會主動終止背景分頁,確保記憶體用量較低。我們採取的因應措施是您的分頁會失去「所有」狀態。
當您再次對該分頁感興趣時,我們必須重新載入分頁,所有與它的互動都會遺失。分頁序列化程式正解決這個問題,使您幾乎能返回原先所在的網路,而不需要回到網路。我們期待日後能與您分享更多有關這項工作的資訊。
試用分頁捨棄功能,並與我們分享你的想法
我們想知道這項功能是否實用,以及可如何改善。歡迎試用這項功能,並嘗試不同功能 (特別是分頁愛好者!), 然後在留言區告訴我們您的想法。:) 如果在 crbug.com 上遇到任何錯誤,也歡迎提交支援單。