舊文件

此處文件僅供參考,請自行考量時效性與適用程度,其他庫藏文件請參考文件頁面
我們亟需您的協助,進行共筆系統搬移、及文件整理工作,詳情請查閱參與我們

幫你的Firefox減減肥-解決Firefox耗用資源的對策

出自 MozTW Wiki

於 2007年4月8日 (日) 02:00 由 Tenki對話 | 貢獻 所做的修訂 (重建圖片)

(前言)


這是在下原先放在討論版的一篇翻譯文,在下先看看討論版的意見之後才"移植"到Wiki上。

原文來源自 : "Reducing memory usage (Firefox)"(自MozillaZine Knowledge Base )

原文很簡單扼要,為了使初學者或老手都看一眼就能上手,我採取了一些做法:

  • 原文翻譯的部份,去掉不必要的,把字體強化作為重點提要放在標題的下方 - 接著算是自己再加點補充。
  • 補充的地方多半是細節上的說明;還有為了增加可讀性,必要的地方再加了點圖片。
  • 原文中許多只能連到英文的文件,我在這裡儘可能去除了,改加進簡單的節要翻譯。

- 相信這樣有助於文章的可讀性,此外,文章內的圖片可能載入較慢,煩請您稍為耐心等待。

歡迎各位針對此文做任何指正,討論板留言位置在這裡

感謝各位幫忙。


--Tenki 2006年4月19日 (CST)



http://www.mozillazine.org/image/default/sky.png

解決Firefox耗用資源的對策

  • 對大多數用戶來說,Firefox 並不會使用異常大量的記憶體。然而,對其他用戶來說 Firefox 的記憶體耗用量是一個重大問題。
  • Windows回報了典型的Firefox 記憶用量大約是50-100 MB,虛擬記憶體用量則在100-150 MB 。這些數據會因為Firefox在系統擁有更多或更少可利用的記憶體下而被預設了使用更多記憶故會有所變動。
  • 如果您遭遇到實質上比此更大的使用量,那也許就是個問題,或者您只是正瀏覽了帶有大量資料的網頁。

如果您在Windows上使用Firefox,使用工作管理員裡的"處理程序"就能看到您的Firefox正佔用了您的多少記憶體。

50-100MB或是100-150M虛擬記憶是在什麼情況下的數據?正因為Firefox本身擴充的自由度大,加上各人瀏覽網頁的習慣常比所謂的"典型"複雜的多,所以這數據其實不一定符合您的Firefox實際情況。您有可能在完全不擴充Firefox而且完全只拿來看網頁郵件(最好是像gmail這一類的)的情況下,得到的數據連50M的一半都不到;也有可能您的Firefox光是啟動完成就會已經超過了100M。

http://public.tenki.googlepages.com/0604190431_clean.JPG

像這樣低的的記憶體使用量應該不可能出現在您正在使用的Firefox上,事實上這是首次安裝下,除了首頁外完全不開網頁"最乾淨"的Firefox使用量。

從之前眾多的討論中可看出,超過100M甚至比150M略高應該是很普遍的現象,上面所寫的範圍並不精確作為參考就好。除非您使用習慣單純(例如不會動輒打開幾十個視窗或分頁)且擴充的結果也正常,但是遇到的數據卻比150M還高出數倍,否則就算在所謂"重度使用"的情況下,Firefox高於上述的使用量仍然算是正常的,您也應該不會因此感覺到Firefox運作發生異常。

文章的內容主要提供了影響Firefox記憶體消耗量的所有成因及可能解決的辦法,至於適用對象較偏向Windows平台的用戶,但其他平台通常也只有設定上的差異而已。有一點要強調的是,他們只是"可能解決"的辦法,有些方法對您的Firefox也許不會有任何效用;有些地方若設定不當,結果會適得其反甚至發生不可預期的錯誤。因此方法縱然簡單也請務必小心謹慎的使用它,好確保您的Firefox運作順暢。


擴充套件和佈景主題

  • 觀察在安全模式下的Firefox的記憶用量將能告訴您某個*擴充套件或佈景主題造成記憶問題。
  • 如果您發現記憶用量大幅減少, 您也許就能發現更新或者替換掉擴充套件或佈景主題可耗用更少的記憶體。
  • 若仍不行的話,移除該擴充套件或佈景主題也是個選擇。

(*)"某個"一辭的說法這裡可能有爭議,Firefox在安全模式下,是停用所有而非單一的套件;在這情況下,只能觀察到停用所有套件下記憶體使用的差異。


有的擴充套件造成Firefox記憶體用量落差程度,會是所有因素之冠;除了設計上的缺失之外,擴充套件本身功能上的要求遠超過瀏覽器基本能力也是一個可能的因素。所以優先從調整擴充套件來降低記憶用量,是最單純且成效極佳的方法。

然而較麻煩的是,在目前並沒有工具程式或者是套件,能報告Firefox擴充套件各自使用記憶體的用量。如此一來在無法事先知道這個套件的記憶體用量的情況下,除了首次安裝新套件後就立即觀察外,個別停用是目前唯一可行的辦法。

Firefox1.5版以後有提供停用套件的功能 - 在所選擇的擴充套件位置上用滑鼠按右鍵,選擇"停用"後,該套件會顯示訊息,通知您在下次再啟動時此套件將會停用。

http://public.tenki.googlepages.com/0604190950_stop_ext_before.JPG

這裡以Google Safe Browsing擴充套件來做例子 - 事實上這個套件是極佳的降低記憶體示範,因為討論版已有人抱怨該版本套件極耗記憶體。此為已選停用,尚未重開啟時,請留意記憶體使用量。


在重啟動後,該套件顯示會呈現灰化;同時再去觀察記憶體用量有無差異;如果成效明顯,您就可考慮將它移除,或者是暫時保留它,待新版本確定改善記憶體使用問題後將它更新再重新啟用。

http://public.tenki.googlepages.com/0604190953_stop_ext_after.JPG

這是重啟動後,該套件停用下的記憶體使用量,您可以看出停用前後兩者相差非常的大。


Plugins(外掛套件)

  • Plugins 可能導致當他們被使用時 Firefox耗用更多的記憶體。他們甚至直到Firefox關閉前都不會將記憶體釋放掉。
  • 確定您正使用著最新版本的每個Plugins是一個好主意。

這裡有一個簡單方法可查到已經安裝的plugins元件版本 - 在網址列打入about:plugins,就可列出所有plugins的資料。

http://public.tenki.googlepages.com/0604191402_about_plugins.jpg

about:plugins查詢plugins資料的功能,版本號碼有的會寫在標題上;有的則是寫在.dll檔案下方。

plugins 數量沒有像擴充套件那樣多,大致來說只有影片(WindowsMedia、QuickTime、RealMedia)、動畫(Flash)、文件(Office、Acrobat)、Java幾個種類。這裏面其實除了Flash以外,只要您用的版本夠新,通常比較不會碰到大量耗用記憶體的問題。

Flash所屬官方所提供的元件在Firefox上的記憶體耗用確實十分嚴重,雖然最新的版本(目前是8.0r24)已經改善了關閉網頁時不釋放記憶體的現象,但是每次播放Flash時載入大量元件,耗用的記憶體仍遠超過其他格式的plugins,就因為如此,有不少人選擇用套件在網頁中阻擋Flash檔案,或者乾脆自Windows解除安裝FlashPlayer。

(阻擋Flash檔案的套件可參考"FlashBlock"網站)

插件在Firefox1.5版並沒有停用的功能,它們也不像擴充套件能自動更新。除了等待更新版本、安裝阻擋套件或完全解除安裝原來程式之外,少數plugins有手動方法可停止使用(不必要的)元件;這裡舉出兩個例子:

  • <Adobe Reader>
    • 註:如果您是安裝7.0.5(Windows)或7.0.1(Linux)及更新版本的,就應該已解決了plugins啟動後記憶用量過大的問題,不需要參考手動停用的方法。
    • 手動的方法有兩個:
        • 找出Adobe Reader安裝程式的資料夾,例如"C:\Program Files\Adobe\Acrobat 6.0\Reader."。
        • 找出"plug_ins"資料夾,將其改名成"plug_ins_disabled",另外再建一個新的"plug_ins"空資料夾。
        • 從"plug_ins_disabled"資料夾複製:EWH32.api, printme.api, search.api至"plug_ins"資料夾。
        • 若正在執行Acrobat Reader,將其關閉。
        • 找出plugins所在的資料夾,例如"C:\Program Files\Adobe\Acrobat 6.0\Reader\plug_ins"。
        • 新建"Optional"資料夾,例如"C:\Program Files\Adobe\Acrobat 6.0\Reader\plug_ins\Optional"。
        • 將所有plugins檔案,連同下面子資料夾搬移至"Optional"資料夾。
  • <Shockwave>
    • 關閉Firefox後,找出plugins資料夾例如"C:\Program Files\Mozilla Firefox\Plugins",將其中"np32dsw.dll"改名成"Xnp32dsw.dll"



下載記錄

  • 如果允許堆積下載記錄的話將會造成Firefox增加耗用記憶體進而使Firefox效能降低甚至停止回應。
  • 清除下載紀錄(在某些情況下您可能需要關閉 Firefox 並從profile文件夾刪除名為" downloads.rdf" 的檔案) 並且改變設定可迴避此問題:
  • "工具- > 選項- > 隱私- > 下載紀錄- > 何時可刪除下載管理員內的檔案紀錄", 選擇 "成功下載後" 。


通常每筆下載紀錄的大小不到1KB,不過對特定使用的習慣,例如常常一次下載大量的圖片,累積的記錄筆數短時間內就會大量增加,針對這類使用情況下,將下載記錄關閉,或者是隨時手動清除紀錄,就能避免啟動Firefox時載入太大的記錄檔。

http://public.tenki.googlepages.com/0604190434_downloads_setting.jpg

設定下載記錄的視窗畫面,注意要選擇"成功下載後"即清除檔案紀錄

這裡列出不同平台Firefox的profile位置

平台 檔案夾
Windows 9x/Me C:\Windows\Application Data\Mozilla\Firefox\Profiles\<Profile name>\
Windows 9x/Me, alternate C:\Windows\Profiles\<Windows login/user name>\Application Data\Mozilla\Firefox\Profiles\<Profile name>\
Windows NT 4.x C:\Winnt\Profiles\<Windows login/user name>\Application Data\Mozilla\Firefox\Profiles\<Profile name>\
Windows XP / 2000 C:\Documents and Settings\<Windows login/user name>\Application Data\Mozilla\Firefox\Profiles\<Profile name>\
Unix ~/.mozilla/firefox/<Profile name>/
Mac OS X ~/Library/Mozilla/Firefox/Profiles/<Profile name>/

~/Library/Application Support/Firefox/Profiles/<Profile name>/

http://public.tenki.googlepages.com/0604190433_downloads_rdf.JPG

downloads_rdf檔案的位置(Windows)

Firefox本身的下載管理員較不適合經常下載大量檔案的場合;針對此情況,建議將下載任務交由續傳軟體如Flashget或GetRight來進行,並配合"Flashgot"擴充套件來使用。


使用設定檔參數降低記憶用量

  • 改變 about:config 中,以下的設定選項能對記憶消耗量發生效用,但也可能影響效能或者減損其功能性。

在Firefox網址列上鍵入about:config,Firefox即會顯示所有Firefox設定檔參數頁面

http://public.tenki.googlepages.com/0604190432_about_config.JPG

about:config 設定頁面

<調整about:config之前您應該先了解的>

  • about:config設定項目的數量非常多,請務必仔細確認好您要調整的參數名稱是否正確
  • about:config的設定資料屬於Firefox Profile設定檔的一部分。為了確保即使在設定錯誤以致Firefox無法正常運作的情況下您仍可以將資料回復成修改前狀態,請事先做好備份Profile的工作,關於備份工具,可參考"MozBackup"網站
  • 在about:config新增設定名稱
    • 後面所提到的設定名稱,在Firefox的原始設定檔都是未建立的。要加入所提到的參數名稱,在about:config頁面的任何地方,按滑鼠右鍵,選擇"新增",右方會再顯示三種參數型態,您必須按照後面設定名稱說明中該設定的型態來選擇。最後再輸入型態的值;若為整數型態請輸入不含小數點數字,若為真假值(Boolean)型態請選擇真(True)或假(False)的其中之一。

http://public.tenki.googlepages.com/0604192251_new_setting_1.JPG

以下介紹與Firefox記憶體使用相關的設定參數

  • browser.cache.memory.enable 和 browser.cache.memory.capacity(註:browser.cache.memory.enable是Firefox已內建的參數,此參數不應更動,以下不另做說明)
    • 型態:
      • browser.cache.memory.enable : 真假值
      • browser.cache.memory.capacity : 整數
    • 預設值:
      • browser.cache.memory.enable : True
      • browser.cache.memory.capacity : -1
    • 說明
      • Firefox根據該參數設定的數值存入等於或小於數值(KB)的快取資料,當載入頁面時,直接存取快取資料可節省頁面更新時要重繪畫面的時間。
      • 通常快取資料存放的是使用介面裡所需的基本元素 - 如圖像、色盤等等。
      • 在預設值(-1)下,Firefox依照以下的規則分配快取大小:
實體記憶數量 分配快取大小(KB)
32MB 2048
64MB 4096
128MB 8192
256MB 14336
512MB 22528
1GB 32768
2GB 45056
4GB 59392
      • 如果設定值過低於上述數值,甚至設為0(此設定將使Firefox完全不載入快取資料),Firefox將因為大量增加自磁碟載入資料的時間而影響效能。
      • 一般情況下,使用預設值-1讓Firefox自動分配即可;如果確定需要自行設定,您可嘗試選擇較小實體記憶體的項目為設定值,譬如您可以64MB做為起始的基準。先嘗試設定為4096,再觀察Firefox運作的情況,再視結果往上調整。

http://public.tenki.googlepages.com/0604172158_cache_capacity_settung.jpg

一個典型的設定數值,Firefox最大的實體記憶使用量將介於128M至256M之間,這樣已足以應付多個分頁。

      • 若您想要觀察所載入快取資料的內容,在網址列鍵入about:cache?device=memory,即可顯示載入內容詳細資訊頁面,要注意的是,標題所顯示是自動分配或者您所設定的數值,但不等同於Windows所回報的記憶體使用量(譬如上述設定4096的情況下,Windows回報的使用量仍可能達到接近64M)

http://public.tenki.googlepages.com/0604192345_about_cache_mem.JPG

memory cache的詳細使用頁面,這裡是採自動分配,該電腦安裝了768M的實體記憶體。


  • browser.sessionhistory.max_total_viewers
    • 型態:
      • 整數
    • 預設值:
      • -1
    • 說明
      • Firefox1.5版開始加入新的快取設計,使用者在按下"回到上/下一頁"按鈕時,Firefox能直接取用存放於記憶體的頁面資料,如此即可用非常快的速度切換前後頁。
      • 此設定項目即是設定最大可快取的頁面數量。一般情況下,一個頁面會使用大約4MB的資料。
      • 在預設值(-1)下,Firefox依照以下的規則分配頁面數量:
實體記憶數量 頁面數量
32MB 0
64MB 1
128MB 2
256MB 3
512MB 5
1GB 8
2GB 8
4GB 8
      • 當數值設為0時,將不載入任何頁面資料。
      • 一般情況下保留預設值由Firefox自動分配即可,如確定需要自行設定,您可視情況決定減低設定的數值,以不影響您使用切換上下頁功能的順暢度為基準。

http://public.tenki.googlepages.com/0604172208_session_setting.jpg

典型的頁面數設定 - 如果您切換頁面的習慣很少超過一頁,您就可考慮用此數值。


  • config.trim_on_minimize

(*註:此設定只適用於Windows平台)

    • 型態:
      • 真假值
    • 預設值:
      • false(Firefox1.5)

http://public.tenki.googlepages.com/0604172206_trim_on_setting.jpg

    • 說明:
      • 在Windows作業系統下,會取回已最小化視窗的程式,供給其他需要額外支用記憶體的程式使用。然而Firefox的設計上是以將程式資料放入記憶體中的方式執行(換言之很少使用磁碟做為執行媒介),Windows取回記憶體的行為會使Firefox還原視窗時必須重新載入程式資料導致可能發生延遲的現象。因此Firefox1.5預設在最小化時保留所有正使用中的記憶體,此選項可決定最小化時是否允許Windows取回記憶體。
      • 這個選項可使Firefox在最小化時,佔用記憶體降至10M以下,還原視窗時短期內使用量看起來有比最小化前降低的效果,但這現象是暫時性的,還原視窗時Firefox在一段時間內逐步取用記憶體,直至原來的水準。
      • 在最小化期間,Firefox為了求得還原時最快載入視窗的效果,會在一定時間後嘗試再去取用原本被Windows取回的記憶體(上昇的速度很緩慢,但經過相當的時間後使用量會上升回接近最小化前的水準),您可觀察設定此選項後實際節省的使用量是否符合您的需求,再決定是否要還原或保留此設定項目。


MozillaZine提供了一份預估可釋放記憶數量的數據,這份數據是基於一台裝置512MB記憶體的電腦上所推估出來的,您也可藉此參考以決定想選擇的設定項目

設定選項 最大記憶釋放
browser.cache.memory.capacity and browser.cache.memory.enable 22MB
browser.sessionhistory.max_total_viewers 20MB
config.trim_on_minimize 在最小化時為10MB

重新啟動Firefox

  • 如果您發現Firefox 的記憶用量在長期的開啟時繼續的增長, 您會想要考慮階段性地重新啟動Firefox 以讓記憶用量回復到合理的水平。

使用此方式的情況下,您首要的考慮是必須能在重新啟動時能將關閉前的畫面自動載入回來。您可到"Session Manager"套件網站以做為輔助此方法的參考。

此外也有方便執行重新啟動Firefox的套件,您可參考"Restart Firefox"套件網站。



Memory leaks(記憶耗損)

  • 在某種程度上Firefox會發生記憶耗損狀況。這些記憶耗損狀況肇因Firefox不釋放不再使用的記憶體,。1.5.0.1 修復了幾個記憶耗損問題。如果您尚未使用,您應該*升級到這個版本。


Mozilla的開發者公佈了一份有關修復Firefox 1.5 bug詳細過程的文件,您可至http://www.squarefree.com/2006/02/04/memory-leak-progress/ 取得這些修復項目的資訊。(此為英文文件,在此不翻譯其內容。)

在之後的Firefox 1.5小版本更新是以安全及穩定性做為主要修復的項目,並不會再針對記憶耗損狀況再做所謂修復動作(除非已牽涉到安全或穩定性問題)。如果您使用最新版本的Firefox 1.5但是仍無法滿足記憶使用量的結果,除了等待大幅更新版本(Firefox 2)以外,也可考慮暫時使用舊版的Firefox 1.0.x。

註:目前(Apr. '06)Firefox最新的版本是1.5.0.2。


Virtual memory(虛擬記憶體)

  • 一些Windos使用者會有Firefox 記憶用量問題,因為他們關閉了虛擬記憶體,或者設定了太小的分頁檔。


事實上關閉Windows虛擬記憶體會影響所有執行的應用程式。通常一般使用者不應該更動Windows虛擬記憶體的設定,而將其交由系統自動指派。

如果您需要開啟及設定虛擬記憶體的資訊,可到Windows說明中搜尋"變更虛擬記憶體分頁檔的大小"的項目,或至http://support.microsoft.com/kb/308417/?FR=1取得更多有關Windows效能設定的資訊。

(註:網站資料適用於Windows XP,不過Windows 2000使用者也可參考其設定,兩者應該沒有太大差異。)


個人工具