你的Firefox中安裝著體積肥大且可能拖慢速度的怪獸套件嗎?
當我之前在部落格中提到Firefox記憶體佔用變少、Firefox 4啟動速度變快,甚至拍下了我實際使用的影片來確認Firefox速度時,還是會有朋友反應在他們使用Firefox時遇到了完全相反的情況,例如他們的Firefox動不動記憶體就飆高到衝破500MB以上,或者他們必須花上超過30秒才能啟動Firefox。是什麼原因造成這樣的使用經驗落差呢?
首先我們應該試試看安裝一個「全新」的Firefox,看看啟動速度、記憶體用量是否有問題?如果有,那可能是作業系統本身和Firefox產生了衝突。而如果這時候全新Firefox是正常的,那多半就是擴充套件造成了效能影響。但是,會是哪一款Firefox擴充套件拖慢了你的速度呢?
Firefox似乎沒有內建工具可以查看每個擴充套件單獨產生的記憶體用量,而我搜尋相關工具也暫時無所斬獲。但今天看到了一篇文章:「Display The Size Of All Firefox Add-Ons, In Firefox」,提供一個還算簡單的方法,可以讓我們快速查看每個擴充套件安裝使用後在硬碟上的壓縮檔案體積,從而我們可以發現哪些套件特別肥大,並據此追蹤這款套件是否可能造成記憶體佔用變多、開啟瀏覽器速度變慢。
- 下面兩篇相關文章,皆有影片實作測試:
- 讓我們跟著 Firefox 4 加速吧!SunSpider測試速度追上Chrome
- 不要再說Firefox開啟慢, Firefox 4 CSR 加速載入大量回復分頁
- 肥大≠降低效能≠有問題
或許某一款擴充套件雖然在硬碟上檔案體積比較大,是個肥大的怪獸套件,但是或許它設計得很好,執行起來很快,也不會佔用CPU或記憶體效能;也或者這個怪獸套件稍微要多佔用一點效能,但因為它真的很有用,所以犧牲一點速度也情有可原的。
因此下面所要介紹的方法,以及所查到的套件體積數據,只是做為判斷的「第一步」而已,例如我們發現A套件體積特別肥大,那我們就可以優先試著停用A套件,比較停用前後Firefox是否有效能的改進,如果確實效能變好,那才能確定這款套件真的會影響效能。
- 快速檢查每個套件安裝後體積
P.S.安裝Firefox套件時,你會看到下載檔案的體積,但這和套件安裝後的體積不同。而今天要介紹的方法相對來說就快速許多,首先,我們利用〔Ctrl〕+〔Shift〕+〔J〕打開「錯誤主控台」。
接著切換到〔錯誤〕頁面,在「程式碼」欄位,填入下面適用於Firefox 3.6.x或Firefox 4的程式碼,接著按下〔執行〕。然後就會在彈出視窗中看到每個擴充套件的體積大小清單了。
來源:Display The Size Of All Firefox Add-Ons, In Firefox
Firefox 3.6.x適用程式碼:
const CI = Components.interfaces; const CC = Components.classes; function computeSizeRecursive(file) { file.QueryInterface(CI.nsIFile); if(file.isSymlink()) { return 0; } var size = file.fileSize; if(file.isDirectory()) { var files = file.directoryEntries; while(files.hasMoreElements()) { size += computeSizeRecursive(files.getNext()); } } return size; } var Application = CC["@mozilla.org/fuel/application;1"].getService(CI.fuelIApplication); var addons = Application.extensions.all; var extDir = Components.classes["@mozilla.org/file/directory_service;1"] .getService(Components.interfaces.nsIProperties) .get("ProfD", Components.interfaces.nsIFile); extDir.append("extensions"); var ios = Components.classes["@mozilla.org/network/io-service;1"] .getService(Components.interfaces.nsIIOService); var addonData = "data:text/html," + "<!DOCTYPE html>" + "<html lang=\"en\">" + " <head>" + " <title>" + " Additional Addon Information" + " </title>" + " </head>" + " <body>" + " <table>" + " <tr>" + " <td>" + " ID" + " </td>" + " <td>" + " Name" + " </td>" + " <td>" + " Size" + " </td>" + " </tr>"; addons.forEach(function(addon) { var ext = extDir.clone(); ext.append(addon.id); addonData += "" + "<tr>" + " <td>" + " " + addon.id + " </td>" + " <td>" + " " + addon.name + " </td>" + " <td>" + " " + ((ext.exists()) ? computeSizeRecursive(ext) : "Unknown") + " </td>" + "</tr>"; }); addonData += "" + " </table>" + " </body>" + "</html>"; var windowManager = CC['@mozilla.org/appshell/window-mediator;1'] .getService(CI.nsIWindowMediator); var win = windowManager.getMostRecentWindow("navigator:browser"); win.open(addonData, "", "");
Firefox 4適用程式碼:
const CI = Components.interfaces; const CC = Components.classes; function computeSizeRecursive(file) { file.QueryInterface(CI.nsIFile); if(file.isSymlink()) { return 0; } var size = file.fileSize; if(file.isDirectory()) { var files = file.directoryEntries; while(files.hasMoreElements()) { size += computeSizeRecursive(files.getNext()); } } return size; } Components.utils.import("resource://gre/modules/AddonManager.jsm"); AddonManager.getAllAddons(function(addons) { var addonData = "data:text/html," + "<!DOCTYPE html>" + "<html lang=\"en\">" + " <head>" + " <title>" + " Additional Addon Information" + " </title>" + " </head>" + " <body>" + " <table>" + " <tr>" + " <td>" + " ID" + " </td>" + " <td>" + " Name" + " </td>" + " <td>" + " Size" + " </td>" + " </tr>"; addons.forEach(function(addon) { addonData += "" + "<tr>" + " <td>" + " " + addon.id + " </td>" + " <td>" + " " + addon.name + " </td>" + " <td>" + " " + ((addon.getResourceURI) ? computeSizeRecursive(addon.getResourceURI() .QueryInterface(CI.nsIFileURL).file) : "Unknown") + " </td>" + "</tr>"; }); addonData += "" + " </table>" + " </body>" + "</html>"; var windowManager = CC['@mozilla.org/appshell/window-mediator;1'] .getService(CI.nsIWindowMediator); var win = windowManager.getMostRecentWindow("navigator:browser"); win.open(addonData, "", ""); });
- 熱門套件常常相對肥大?
然後下圖是一個全新的Firefox,我依序安裝Firefox套件網站上最熱門的前幾名套件,然後我們可以看到相對體積龐大的有Firebug、NoScript、Adblock Plus、Tab Mix Plus、Download Statusbar。
我慣用的Firefox中雖然安裝比較多套件,但套件總體積只有:7,058,871 Byte。而安裝熱門套件的後面這款全新Firefox,雖然裝的套件比較少,但幾乎都相對肥大,所以總體積有:12,460,976 Byte。
- 正確認知套件功能、效能影響,以及你的需求
那麼接下來我們要做的,就是實際去檢查這些套件在執行後,是不是真的對記憶體佔用、網路瀏覽效能有所影響了。而以我自己的使用經驗來看,Firebug、NoScript、Adblock Plus是真的都會影響效能。
只是,重點還是在於:如此強大功能的套件在其它瀏覽器上是看不到的!(即使有相似的功能也無法如此強大)所以假如我們的硬體足以應付,那麼因為需要而安裝這些套件其實是合理的選擇,就算真的犧牲一點點效能我想也是划得來的,只是用戶要對擴充套件與Firefox瀏覽器間的影響有正確認知即可。
就我的看法而言,「檔案大小」和「實際程式執行的效能」幾乎沒有太大的關聯。但是檔案多+碎片很多的硬碟會導置緩慢的啟動速度,這點可以透過重組硬碟解決。
回覆刪除AdBlock Plus肥大的原因可能是因為過慮條件集的關係。(EasyList一個要240KB)
感謝你的回饋~
回覆刪除確實「檔案大小」和「實際程式執行的效能」之間不能說是「絕對有關」,
而我這篇的角度是,或許我們可以先找出體積比較大的套件,先從這些套件下手,檢查看看是不是它們影響了瀏覽器效能或速度
當然,也感謝您提供的重組優化方法~
我的裡面最大的就是 IE TABs
回覆刪除我的是Web Developer最大|||b
回覆刪除我的是Google Toolbar for Firefox==|||
回覆刪除Firebug最大,把几个使用率不高的大家伙干掉了
回覆刪除其實在Firefox 4如果發現冷啟動速度慢、記憶體佔用高(一啟動救200M以上)應該要高興一下,
回覆刪除因為這表示你的電腦可以使用Firefox的硬體加速
而上述這些問題好像是因為Mozilla團隊還沒對硬體加速優化所造成的~
屆時Firefox 4正式推出這些問題應該就解決了~
我写过删除扩展中的多余语言包的脚本
回覆刪除http://qixinglu.com/archives/remove_firefox_extension_useless_locale_shell_script
实际感觉也没快多少
最主要還是找出有問題的套件
回覆刪除而體積因素只是一個幫助判斷的可能性之一
Greasefire 16024211
回覆刪除好恐怖阿
rikanchan的辭庫加起來就超過100mb了說,乖乖..
回覆刪除難怪我的記憶體使用量超過5、600MB是常態
如果套件需要動到的資源越多對Fx來說就越耗系統資源,拿檔案大小雖然不一定準確但至少可以作為參考,我覺得最好的方式是在套件管理功能上增加監控的區域,類似工作管理員可以顯示每個套件所執行的CPU及記憶體大小
回覆刪除像Xmarks或Febe這種同步套件因為需要同時複製書籤及某些設定值的關係,所以當然會耗掉一些系統資源,如果有個參考至少可以讓使用者判斷到底有沒有必要安裝這些元件拖慢Fx呢?
說實在的,我不太會在意Firefox啟動速度慢個幾秒,因為等它啟動完成後就平步青雲了,就可以展開愉悅的瀏覽體驗,各種可以幫助你工作效率的 Addons 讓我感覺等待是值得的。本人使用的 Addons 一共有 42 個,載入時間也差不多 10 來秒左右。總而言之老話一句:
回覆刪除「Firefox + Addons = 神龍配鳳凰,天下無敵王。」
disable不常用又大的addons, febe, ietab,
回覆刪除IE Tab現在使用機率非常非常低,
回覆刪除所以我之前也把它移除了,
如果真的要用IE時,再打開IE 8來用
Greasefire
回覆刪除greasefire@skrul.com
16083871
冠軍,我要停用了= =||||
實在太感謝版主寫的這篇文章了,也很佩服你能找到這樣的資訊。請問你是怎麼找到的呢?想和您請教做學問的方法。
回覆刪除看了這篇文章之後,我就檢查我的FireFox,也把一些經驗提供給大家,雖然我安裝的套件已經很少了。
只有
Adblock Plus 1712669
Download Statusbar 1499157
新同文堂 677395
Easy DragToGo 105356
可是還是想讓他更快,所以先從最肥的Adblock Plus下手,結果進行以下動作之後,發現完全無法把她減肥
命中數最低的過濾條件刪除(減少過濾條件)
命中數統計歸零
flash和java顯示頁簽取消
結果完全無法減肥,所以不管改Adblock Plus改怎樣,都是無法把她減肥的
可是這個套件對我又很重要(現在網頁的廣告都太花了,眼睛受不了)所以只好忍耐他
附帶一提,這套件和Download Statusbar,版本升級後占用的記憶體更多,所以如果已經堪用了,就不用升級了
Download Statusbar我再觀察看看,反正很少下載東西,開FF看網頁佔掉90%以上,觀察一陣子就打算把他搧掉了。
新同文堂:因為已經能完全看懂簡體了,所以也把她刪了
Easy DragToGo 太好用了,占用的記憶體也小,所以留著
以下的經驗提供給大家
順道問一下大家,大家FireFox剛開時候(還沒讀取任何網頁之前)記憶體是多少呢,我的是 FireFox 3.6.3版
回覆刪除只有安裝
Adblock Plus
Download Statusbar
Easy DragToGo
剛開的時候占掉記憶體是32MB
感謝您的分享
回覆刪除我自己剛打開firefox時,大概佔用61MB的記憶體用量
感謝提供這麼棒的小技巧:)
回覆刪除話說異塵兄有用過社群版本(ex:palemoon,tete,pigfoot,綾川等等)的火狐嗎?
我自己目前是用palemoon的版本,比起相同套件數(我是直接複製一份profile餵他吃,大部分套件都能順利安裝)的原版火狐,似乎在使用經驗上真的有快了一些。
另外就是,不曉得異塵兄在用途分類上,有把profile分成幾類嗎,想請教您的分類方式,避免把單一profile的套件數過多(大於30?20?)。
感謝閱讀及回覆。
對了,之前好像有聊過希望您擺上最新回應的hack,
回覆刪除用官方有點陽春且效能不佳(我現在就看到這張圖)
不介意的話,可以參考看看lvchen的最新回應 2.0 來囉!
具體展現成果可以看該格主的blog,我個人覺得還不錯,也有自訂性,效能也有改善過了,真的不喜歡再移除就好了科科。:P
感謝素虫提供的建議與資料,我會試用看看
回覆刪除另外關於profile,我會分類,但通常是分成工作用、測試用而已
工作用的profile我一般就是只有一個,我的套件目前很少超過20個
我安裝了32個擴展,禁用了其中2個,打開後記憶體佔用63MB多點。偶爾發現佔用90MB之多,重啟。
回覆刪除有些擴展平時很少用到,可需要時又不能沒有它,比如Split Browser、Sessinon Manager。真是沒有辦法。
不知有沒有辦法不裝Sessionmanger能在FF崩潰後恢復標籤頁。
原本的Firefox就有這個功能
回覆刪除怪了,之前沒裝會話管理,崩潰後無法恢復會話,安裝會話管理後卻能。究竟如何使用才能不裝會話管理也能恢復會話呢?
回覆刪除我卸載會話管理後發崩潰後發現也能恢復會話歷史了,謝謝樓主的提醒。
回覆刪除我覺得有的時候不只是套件的問題,上次3.6時期,有同學跟我抱怨說他的火狐很慢,我就幫他清了歷史紀錄(當然這動作要經過同學本人同意),清了之後就叫這位同學重開火狐,果然開啟的速度比較快了
回覆刪除清歷史紀錄、壓縮資料庫(可以用speedyfox)這些當然是要做的,在那之後就是套件的問題了,火狐有個大缺點,即使移除了某套件,但這套件的殘渣還會留下來(about:config中往往可以找到一些已移除套件的值),所以大版號升級時開新設定檔重練是比較好的,...話說看了這篇我才知道ColorZilla這被我以為是小巧套件的東西居然這麼大...
回覆刪除大的插件很多都是因为localization文件占了很大的空间。我的Tab mix plus去除本地化文件之后只有306067的大小。
回覆刪除Adblock Plus的插件和订阅是分开的。 Adblock Plus 去除本地化文件之后只有209303的大小。
回覆刪除about:config 中 extensions.alwaysUnpack设为false。
回覆刪除不过Fx3似乎没这一条。Fx4可用。
还要需要把unpack的插件中的unpack设为false。
@Sam:
回覆刪除這是很好的提醒
把換了兩三個替代原件後,果然速度是提升了!
回覆刪除事實證明是元件拖慢了瀏覽器速度...
基本上一定是因為擴充套件~
回覆刪除只是要找出來有時也步容易就是了XD
圖形化about :confing
回覆刪除https://addons.mozilla.org/zh-TW/firefox/addon/guiconfig/?src=api
切換身分
https://addons.mozilla.org/zh-TW/firefox/addon/multifox/
分頁自動暫停、只快取分頁標題
https://addons.mozilla.org/zh-TW/firefox/addon/suspend-tab/
清除先前已砍套件垃圾
https://addons.mozilla.org/en-US/firefox/addon/ecleaner/
簡易設定加速優化
https://addons.mozilla.org/en-US/firefox/addon/rsccmanfasterfox/?src=userprofile
隱私- 新型態廣告追蹤問題
(這比台灣人寫的另一套的差異在新增假個指紋而不是只封鎖)
https://addons.mozilla.org/zh-TW/firefox/addon/no-canvas-fingerprinting/
隱私 - CDN追蹤問題
https://addons.mozilla.org/zh-TW/firefox/addon/decentraleyes/
隱私 - 廣告封鎖,別再用ADBlock了
https://addons.mozilla.org/zh-TW/firefox/addon/ublock-origin/