漲姿勢!為什麼Chrome瀏覽器特愛吃記憶體
微軟用慣用的手法——改名——給 IE 被黑的一生畫上了句號。還好,它在技術段子圈裡早就有了接班人:Chrome。
Chrome 很好很強大,速度極快、功能很多。但同時它也是你的電腦記憶體不足或者耗電太快的罪魁禍首。沒辦法,Chrome 太愛吃記憶體了(如頭圖)。
為什麼?我們找到了 4 個最關鍵的答案,不需要特別懂技術也可以理解。
1. Chrome 把你在瀏覽器上做的每件事都拆成獨立的程式
在大多數 PC 作業系統中,各種軟體和服務是以程式(Process)的形態出現並儲存在系統的記憶體當中的。然而,隨著 Web 技術的發展,瀏覽器功能日益強大,現在大多數人會發現,使用電腦不再需要安裝各種各樣的軟體,很多工作在瀏覽器中就能完成。Chrome 支援各種各樣的外掛和擴充套件,為瀏覽器增添功能,其中很多外掛和擴充套件乾脆就已經是一個打包好可以在本地使用的軟體。
過多的軟體、功能和服務勢必意味著瀏覽器的體型會變得臃腫,而如果一個瀏覽器只是一個程式的話,一旦出現系統故障,整個瀏覽器就崩潰了——那意味著你瀏覽的所有內容、輸入的文字和開啟的軟體、觀看的視訊、在網頁上玩的小遊戲,全都沒了。而 Chrome 會把所有開啟的網頁標籤、外掛、擴充套件,以及播放的 Flash 視訊都拆成獨立的程式。這樣,一個程式崩潰,不會影響到瀏覽器的其他功能正常運轉。
這樣做的優勢是瀏覽器功能多,且快速穩定;劣勢就是佔用很多記憶體。
2. 在你沒點選 URL 之前,Chrome 已經在幫你載入了
更好的使用者體驗與更大的系統資源壓力就像是雙生子。Chrome 瀏覽器提供一個預載入功能(Chrome Prerendering),在使用者還沒有點選某個連結的時候就已經提前開始載入了。
比如,如果瀏覽的是部落格文章,Chrome 有可能會預先載入「下一篇博文」;再比如,如果你在 Google 上搜尋某個學術名詞的話,Chrome 有可能會預先載入來自維基百科的結果
有時候你會發覺,第一次登陸某個網頁的時候很慢,但後來再在位址列輸入訪問,會快很多。這是因為 Chrome 會基於歷史瀏覽記錄和對該網頁的安全性判斷,預先載入這個網頁。
3. 記憶體洩露
記憶體洩露是一個技術上的名詞,簡單來說,他的意思就是佔用記憶體的軟體或服務,在完成工作之後無法釋放那些不再使用的記憶體。歷史上有一些非常經典的記憶體洩露事故,比如在某個版本的 Mac OS X 作業系統上,以原生、快速和低記憶體以來著稱的 Safari 瀏覽器,竟然能把本機所有的記憶體全都佔掉,以至於其他程式無法正常工作,甚至系統都開始不穩定。
Chrome 瀏覽器也會出現記憶體洩露問題,不過現在瀏覽器本身已經比較穩定了。不穩定的地方在於部分樣式或功能複雜的網站,以及一些程式碼不乾淨的 Chrome 外掛和擴充套件。前幾天,一位 Android Chrome 工程師在 Reddit 上表示,有團隊正在積極研究如何解決桌面版 Chrome 的擴充套件和外掛記憶體洩露問題。
4. 開了太多標籤和外掛
前面提到,很多以擴充套件形式存在的 Chrome 本地應用功能也已經十分強大,Web 技術日新月異使得很多網站在瀏覽器中呈現所佔用的記憶體也已經不亞於一個普通的本地軟體。這個不用過多解釋。
Chrome 佔記憶體到底好不好?
你需要記住一句話:空閒的記憶體是沒用的。(free RAM is useless RAM)
記憶體的功能是在本地一個高速短期儲存空間內放置程式,從而在使用或未使用但需要喚醒的時候更快地載入出來。因此,短期的高記憶體佔用並不是壞事,它優化了使用體驗——可以說,記憶體存在的意義就是被佔用。
但長期高記憶體佔用就不是好事了。長期高記憶體佔用可能和前面提到的網頁/外掛/擴充套件記憶體洩露問題有關,也有可能由使用者不良使用習慣導致。過多記憶體被佔用會導致提供給其他軟體或服務的記憶體資源不足,導致系統不穩定。另外,絕大多數作業系統都有虛擬記憶體功能,也就是在硬碟上設立一塊空間當做記憶體。這是記憶體不足時的替代方案,顯然對硬碟的讀取速度要比對記憶體的讀取速度慢得多。
怎樣解放 Chrome 記憶體?
1. 檢視任務/程式管理器,關掉佔用大量記憶體的程式
在 Windows Chrome 上按 Shift+Esc,或者在 Mac 上點選視窗→工作管理員,喚醒 Chrome 自己的工作管理員。用這種方法,你可以關閉那些沒有使用但是依然在後臺佔用太多記憶體的標籤或程式。
2. 解除安裝不需要的擴充套件和外掛
3. 保持 Flash 視訊播放外掛不自動播放
點選設定→高階設定→隱私設定→內容設定,選擇不自動開啟外掛。
4. 用工具來管理閒置的標籤
前兩天我們剛剛介紹過的 The Great Suspender 就是這樣一個優秀的工具。它可以根據設定自動休眠掉當前不使用的標籤,節省系統資源。
相關文章
- 什麼?JVM 老年代記憶體不斷上漲竟是因為獲取 ServletContext 姿勢不對JVM記憶體ServletContext
- 谷歌Chrome瀏覽器引入省記憶體/省電模式:減少記憶體佔用谷歌Chrome瀏覽器記憶體模式
- 一次 Java 記憶體洩漏排查過程,漲姿勢Java記憶體
- 漲姿勢系列之——核心環境下記憶體對映函式記憶體函式
- 漲姿勢:Android手機的系統為什麼叫ROMAndroid
- 國密瀏覽器是什麼?有哪些?有什麼特點?瀏覽器
- js 判斷是什麼瀏覽器、是否為谷歌瀏覽器JS瀏覽器谷歌
- 為什麼暫存器比記憶體快?記憶體
- Google Chrome瀏覽器GoChrome瀏覽器
- 我為什麼要使用谷歌瀏覽器谷歌瀏覽器
- 為什麼瀏覽器採用多程式模型瀏覽器模型
- 安裝Chrome瀏覽器Chrome瀏覽器
- MongoDB 如何使用記憶體?為什麼記憶體滿了?MongoDB記憶體
- MongoDB如何使用記憶體?為什麼記憶體滿了?MongoDB記憶體
- Chrome 瀏覽器修改 UA 模擬其它瀏覽器,包括移動瀏覽器Chrome瀏覽器
- puppeteer chrome/chrome canary 登入瀏覽器Chrome瀏覽器
- Java記憶體模型是什麼,為什麼要有Java記憶體模型,Java記憶體模型解決了什麼問題?Java記憶體模型
- 為什麼谷歌瀏覽器開啟是2345瀏覽器 谷歌瀏覽器一開啟是2345介面怎麼辦谷歌瀏覽器
- Chrome瀏覽器擴充套件開發系列之九:Chrome瀏覽器的chrome.alarms.* APIChrome瀏覽器套件API
- Google瀏覽器外掛之快閃記憶體過濾器Go瀏覽器記憶體過濾器
- chrome禁用js怎麼設定 如何禁止chrome瀏覽器JavaScriptChromeJS瀏覽器JavaScript
- chrome瀏覽器使用記錄Chrome瀏覽器
- 谷歌 Chrome 瀏覽器將支援顯示每個標籤頁休眠後節省的記憶體谷歌Chrome瀏覽器記憶體
- ubuntu chrome瀏覽器安裝UbuntuChrome瀏覽器
- Google Chrome for Mac(谷歌瀏覽器)GoChromeMac谷歌瀏覽器
- Ubuntu 安裝Chrome瀏覽器UbuntuChrome瀏覽器
- ubuntu安裝chrome瀏覽器UbuntuChrome瀏覽器
- 有用的 Chrome 瀏覽器命令Chrome瀏覽器
- 谷歌瀏覽器怎麼清除快取 chrome瀏覽器清理快取方法介紹谷歌瀏覽器快取Chrome
- 使用chrome瀏覽器驅動自動開啟瀏覽器Chrome瀏覽器
- SQL Server為什麼這麼耗記憶體SQLServer記憶體
- 我也愛Firebird瀏覽器瀏覽器
- windows10系統谷歌瀏覽器佔用記憶體太多怎麼辦Windows谷歌瀏覽器記憶體
- edge是什麼瀏覽器 microsoft edge是ie瀏覽器嗎瀏覽器ROS
- 反射記憶體卡的優勢與特點反射記憶體
- 什麼是伺服器記憶體?如何選擇伺服器記憶體?伺服器記憶體
- 深夜除錯某瀏覽器記憶體損壞的小記錄除錯瀏覽器記憶體
- 物件為什麼活在記憶體的解析物件記憶體