從Firefox 93開始,Firefox會監控系統可用的記憶體,當記憶體用量達臨界點,瀏覽器即將崩潰之前,Firefox會藉由卸載記憶體使用量大、但是用戶未正在使用的分頁,以確保Firefox的穩定性,卸載的分頁會在用戶下次需要時重新載入,頁面的捲動位置和表單資料也都會恢復。這項功能會先在Windows上啟用,接著會部署到macOS和Linux。

記憶體不足是導致Firefox瀏覽器和內容程序崩潰的主要原因之一,官方提到,卸載分頁來節省Firefox記憶體使用量,對於避免軟體完全崩潰是有效的手段,尤其是Firefox能夠更好地應對在資源有限的機器上,開啟許多分頁的用例。

過去Mozilla就已經嘗試在Windows上卸載分頁籤,但是一直無法在減少瀏覽器記憶體使用量,以及降低用戶體驗間找到平衡,因為重新開啟分頁會出現輕微延遲。

而Mozilla現在透過改進低記憶體檢測和分頁選擇演算法,來縮小卸載分頁的影響範圍。Mozilla在Nightly頻道上進行一項相關實驗,證實卸載分頁籤的確可以降低瀏覽器崩潰次數,在這為期一個月的實驗,整體瀏覽器崩潰和內容程序崩潰明顯減少,用戶能夠使用瀏覽器的時間更長。

但有趣的是,在實驗中,研究人員也看到剩下的崩潰案例中,記憶體不足造成的崩潰比例增加,而且平均瀏覽器記憶體使用量增加。Mozilla以倖存者偏差來解釋後者,提到高記憶使用率的瀏覽器,在過去會直接崩潰,但是現在能夠在達到臨界點之前,透過卸載分頁來維持正常運作。

而對於記憶體不足崩潰比例增加,Mozilla並沒有一個確定的答案,他們猜測可能在部分情況,啟動分頁籤卸載為時已晚,因為像是卸載分頁籤需要對JavaScript堆進行垃圾回收,該操作需要額外的臨時儲存,因此導致分頁直接崩潰而非被卸載。不過就整體而言,卸載分頁籤仍可以避免整個瀏覽器崩潰。

Mozilla提到,雖然他們會繼續研究相關的問題,並且改進啟發式方法,但是有鑒於該功能已經明顯改善瀏覽器崩潰機率,因此他們仍然會在Firefox 93推出該功能。

由於卸載分頁會干擾用戶的瀏覽體驗,因此Firefox只會在系統記憶體嚴重不足時,才會啟用該功能避免崩潰。在Windows上,Firefox是透過作業系統的CreateMemoryResourceNotification,來獲取物理記憶體量低下的訊號,官方提到,雖然沒有明確的物理記憶體低下閾值的數值,但約為6%,一旦發生這種情況,Firefox會開始定期檢查記憶體提交空間。

當提交空間低於閾值時,Firefox便會卸載一個頁籤,當沒有可卸載的分頁,便會觸發Firefox內部記憶體壓力警示,降低瀏覽器子系統的記憶體使用量,Firefox會一直重複檢查提交空間並且卸載分頁,或是降低子系統記憶體用量的程序,直到記憶體提交空間高於閾值。

Mozilla解釋,檢查提交空間能夠預測真正崩潰的時機點,由於只要有虛擬記憶體和物理記憶體可用,Firefox就能夠繼續運作,即便物理記憶體用完了,Firefox也僅是效能驟降,但是Firefox不會崩潰,但是在Windows上,只要提交空間不足,就算還有可用的物理記憶體,也會因為記憶體分配失敗造成應用程式崩潰。

在理想情況中,Firefox會根據用戶上次使用分頁的時間,選擇要卸載的分頁,播放聲音、子母畫面(Picture-in-Picture)、釘選和使用WebRTC的分頁權重較大,因此不太可能被Firefox卸載,前臺的分頁永遠不會被卸載。

目前Firefox 93提供了一個卸載測試頁面about:unloads,可供使用者測試,目前這個功能還在測試階段,會在Firefox 94發布時正式提供。


熱門新聞

Advertisement