你的Firefox中安裝著體積肥大且可能拖慢速度的怪獸套件嗎?

firefox big extesion-00
當我之前在部落格中提到Firefox記憶體佔用變少、Firefox 4啟動速度變快,甚至拍下了我實際使用的影片來確認Firefox速度時,還是會有朋友反應在他們使用Firefox時遇到了完全相反的情況,例如他們的Firefox動不動記憶體就飆高到衝破500MB以上,或者他們必須花上超過30秒才能啟動Firefox。是什麼原因造成這樣的使用經驗落差呢? 

首先我們應該試試看安裝一個「全新」的Firefox,看看啟動速度、記憶體用量是否有問題?如果有,那可能是作業系統本身和Firefox產生了衝突。而如果這時候全新Firefox是正常的,那多半就是擴充套件造成了效能影響。但是,會是哪一款Firefox擴充套件拖慢了你的速度呢? 

Firefox似乎沒有內建工具可以查看每個擴充套件單獨產生的記憶體用量,而我搜尋相關工具也暫時無所斬獲。但今天看到了一篇文章:「Display The Size Of All Firefox Add-Ons, In Firefox」,提供一個還算簡單的方法,可以讓我們快速查看每個擴充套件安裝使用後在硬碟上的壓縮檔案體積,從而我們可以發現哪些套件特別肥大,並據此追蹤這款套件是否可能造成記憶體佔用變多、開啟瀏覽器速度變慢。

  • 肥大≠降低效能≠有問題
這裡必須要說明清楚的是,這只是「可能造成影響」的一種判斷依據,但不是必然的判準。

或許某一款擴充套件雖然在硬碟上檔案體積比較大,是個肥大的怪獸套件,但是或許它設計得很好,執行起來很快,也不會佔用CPU或記憶體效能;也或者這個怪獸套件稍微要多佔用一點效能,但因為它真的很有用,所以犧牲一點速度也情有可原的。

因此下面所要介紹的方法,以及所查到的套件體積數據,只是做為判斷的「第一步」而已,例如我們發現A套件體積特別肥大,那我們就可以優先試著停用A套件,比較停用前後Firefox是否有效能的改進,如果確實效能變好,那才能確定這款套件真的會影響效能。


  • 快速檢查每個套件安裝後體積
在理解上述的前提下,讓我們回來說明檢查套件安裝後體積大小的方法。其實,你也可以直接到Firefox Profile資料夾中查看每個套件資料夾所佔用的體積,但因為這裡每個套件都是使用代碼表示,要找出哪個代碼是哪個套件,還要花上不少時間。
P.S.安裝Firefox套件時,你會看到下載檔案的體積,但這和套件安裝後的體積不同。
而今天要介紹的方法相對來說就快速許多,首先,我們利用〔Ctrl〕+〔Shift〕+〔J〕打開「錯誤主控台」。
firefox big extesion-03
接著切換到〔錯誤〕頁面,在「程式碼」欄位,填入下面適用於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, "", "");

});





  • 熱門套件常常相對肥大?
下面這些數據的單位是Byte,首先看到下圖中是我常用Firefox中安裝的一些擴充套件,其中以Firefox SyncWOT這兩款套件相對體積龐大(是其它套件的好幾倍)。

firefox big extesion-02
然後下圖是一個全新的Firefox,我依序安裝Firefox套件網站上最熱門的前幾名套件,然後我們可以看到相對體積龐大的有Firebug、NoScript、Adblock Plus、Tab Mix Plus、Download Statusbar。

我慣用的Firefox中雖然安裝比較多套件,但套件總體積只有:7,058,871 Byte。而安裝熱門套件的後面這款全新Firefox,雖然裝的套件比較少,但幾乎都相對肥大,所以總體積有:12,460,976 Byte。
firefox big extesion-01


  • 正確認知套件功能、效能影響,以及你的需求
當然,從這裡我們只是發現了一個基本事實:許多知名的、很多人安裝的擴充套件,其實體積相對較肥大,而且有些肥大很多(但換個角度來說,正是因為它們功能豐富、強大,所以體積也較大)。

那麼接下來我們要做的,就是實際去檢查這些套件在執行後,是不是真的對記憶體佔用、網路瀏覽效能有所影響了。而以我自己的使用經驗來看,Firebug、NoScript、Adblock Plus是真的都會影響效能。

只是,重點還是在於:如此強大功能的套件在其它瀏覽器上是看不到的!(即使有相似的功能也無法如此強大)所以假如我們的硬體足以應付,那麼因為需要而安裝這些套件其實是合理的選擇,就算真的犧牲一點點效能我想也是划得來的,只是用戶要對擴充套件與Firefox瀏覽器間的影響有正確認知即可

留言

  1. 就我的看法而言,「檔案大小」和「實際程式執行的效能」幾乎沒有太大的關聯。但是檔案多+碎片很多的硬碟會導置緩慢的啟動速度,這點可以透過重組硬碟解決。

    AdBlock Plus肥大的原因可能是因為過慮條件集的關係。(EasyList一個要240KB)

    回覆刪除
  2. 感謝你的回饋~

    確實「檔案大小」和「實際程式執行的效能」之間不能說是「絕對有關」,

    而我這篇的角度是,或許我們可以先找出體積比較大的套件,先從這些套件下手,檢查看看是不是它們影響了瀏覽器效能或速度

    當然,也感謝您提供的重組優化方法~

    回覆刪除
  3. 我的裡面最大的就是 IE TABs

    回覆刪除
  4. 我的是Web Developer最大|||b

    回覆刪除
  5. 我的是Google Toolbar for Firefox==|||

    回覆刪除
  6. Firebug最大,把几个使用率不高的大家伙干掉了

    回覆刪除
  7. 其實在Firefox 4如果發現冷啟動速度慢、記憶體佔用高(一啟動救200M以上)應該要高興一下,
    因為這表示你的電腦可以使用Firefox的硬體加速
    而上述這些問題好像是因為Mozilla團隊還沒對硬體加速優化所造成的~
    屆時Firefox 4正式推出這些問題應該就解決了~

    回覆刪除
  8. 我写过删除扩展中的多余语言包的脚本
    http://qixinglu.com/archives/remove_firefox_extension_useless_locale_shell_script
    实际感觉也没快多少

    回覆刪除
  9. 最主要還是找出有問題的套件

    而體積因素只是一個幫助判斷的可能性之一

    回覆刪除
  10. Greasefire 16024211
    好恐怖阿

    回覆刪除
  11. rikanchan的辭庫加起來就超過100mb了說,乖乖..
    難怪我的記憶體使用量超過5、600MB是常態

    回覆刪除
  12. 如果套件需要動到的資源越多對Fx來說就越耗系統資源,拿檔案大小雖然不一定準確但至少可以作為參考,我覺得最好的方式是在套件管理功能上增加監控的區域,類似工作管理員可以顯示每個套件所執行的CPU及記憶體大小

    像Xmarks或Febe這種同步套件因為需要同時複製書籤及某些設定值的關係,所以當然會耗掉一些系統資源,如果有個參考至少可以讓使用者判斷到底有沒有必要安裝這些元件拖慢Fx呢?

    回覆刪除
  13. 說實在的,我不太會在意Firefox啟動速度慢個幾秒,因為等它啟動完成後就平步青雲了,就可以展開愉悅的瀏覽體驗,各種可以幫助你工作效率的 Addons 讓我感覺等待是值得的。本人使用的 Addons 一共有 42 個,載入時間也差不多 10 來秒左右。總而言之老話一句:

    「Firefox + Addons = 神龍配鳳凰,天下無敵王。」

    回覆刪除
  14. disable不常用又大的addons, febe, ietab,

    回覆刪除
  15. IE Tab現在使用機率非常非常低,
    所以我之前也把它移除了,

    如果真的要用IE時,再打開IE 8來用

    回覆刪除
  16. Greasefire
    greasefire@skrul.com
    16083871

    冠軍,我要停用了= =||||

    回覆刪除
  17. 實在太感謝版主寫的這篇文章了,也很佩服你能找到這樣的資訊。請問你是怎麼找到的呢?想和您請教做學問的方法。

    看了這篇文章之後,我就檢查我的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 太好用了,占用的記憶體也小,所以留著

    以下的經驗提供給大家

    回覆刪除
  18. 順道問一下大家,大家FireFox剛開時候(還沒讀取任何網頁之前)記憶體是多少呢,我的是 FireFox 3.6.3版
    只有安裝
    Adblock Plus
    Download Statusbar
    Easy DragToGo

    剛開的時候占掉記憶體是32MB

    回覆刪除
  19. 感謝您的分享

    我自己剛打開firefox時,大概佔用61MB的記憶體用量

    回覆刪除
  20. 感謝提供這麼棒的小技巧:)

    話說異塵兄有用過社群版本(ex:palemoon,tete,pigfoot,綾川等等)的火狐嗎?

    我自己目前是用palemoon的版本,比起相同套件數(我是直接複製一份profile餵他吃,大部分套件都能順利安裝)的原版火狐,似乎在使用經驗上真的有快了一些。

    另外就是,不曉得異塵兄在用途分類上,有把profile分成幾類嗎,想請教您的分類方式,避免把單一profile的套件數過多(大於30?20?)。

    感謝閱讀及回覆。

    回覆刪除
  21. 對了,之前好像有聊過希望您擺上最新回應的hack,
    用官方有點陽春且效能不佳(我現在就看到這張圖
    不介意的話,可以參考看看lvchen的最新回應 2.0 來囉!

    具體展現成果可以看該格主的blog,我個人覺得還不錯,也有自訂性,效能也有改善過了,真的不喜歡再移除就好了科科。:P

    回覆刪除
  22. 感謝素虫提供的建議與資料,我會試用看看

    另外關於profile,我會分類,但通常是分成工作用、測試用而已

    工作用的profile我一般就是只有一個,我的套件目前很少超過20個

    回覆刪除
  23. 我安裝了32個擴展,禁用了其中2個,打開後記憶體佔用63MB多點。偶爾發現佔用90MB之多,重啟。

    有些擴展平時很少用到,可需要時又不能沒有它,比如Split Browser、Sessinon Manager。真是沒有辦法。

    不知有沒有辦法不裝Sessionmanger能在FF崩潰後恢復標籤頁。

    回覆刪除
  24. 原本的Firefox就有這個功能

    回覆刪除
  25. 怪了,之前沒裝會話管理,崩潰後無法恢復會話,安裝會話管理後卻能。究竟如何使用才能不裝會話管理也能恢復會話呢?

    回覆刪除
  26. 我卸載會話管理後發崩潰後發現也能恢復會話歷史了,謝謝樓主的提醒。

    回覆刪除
  27. 我覺得有的時候不只是套件的問題,上次3.6時期,有同學跟我抱怨說他的火狐很慢,我就幫他清了歷史紀錄(當然這動作要經過同學本人同意),清了之後就叫這位同學重開火狐,果然開啟的速度比較快了

    回覆刪除
  28. 清歷史紀錄、壓縮資料庫(可以用speedyfox)這些當然是要做的,在那之後就是套件的問題了,火狐有個大缺點,即使移除了某套件,但這套件的殘渣還會留下來(about:config中往往可以找到一些已移除套件的值),所以大版號升級時開新設定檔重練是比較好的,...話說看了這篇我才知道ColorZilla這被我以為是小巧套件的東西居然這麼大...

    回覆刪除
  29. 大的插件很多都是因为localization文件占了很大的空间。我的Tab mix plus去除本地化文件之后只有306067的大小。

    回覆刪除
  30. Adblock Plus的插件和订阅是分开的。 Adblock Plus 去除本地化文件之后只有209303的大小。

    回覆刪除
  31. about:config 中 extensions.alwaysUnpack设为false。
    不过Fx3似乎没这一条。Fx4可用。
    还要需要把unpack的插件中的unpack设为false。

    回覆刪除
  32. 把換了兩三個替代原件後,果然速度是提升了!
    事實證明是元件拖慢了瀏覽器速度...

    回覆刪除
  33. 基本上一定是因為擴充套件~
    只是要找出來有時也步容易就是了XD

    回覆刪除
  34. 圖形化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/

    回覆刪除

張貼留言

為了避免垃圾廣告留言過多,開始測試「留言管理」機制,讓我可以更容易回應讀者留言,並更簡單過濾掉廣告,但只要不是廣告留言都會通過審核。

這個網誌中的熱門文章

全家沖印、 7-11 列印照片誰好用?立可得與 ibon教學+比較表

微軟 Bing AI 繪圖工具 Image Creator 免費開放,30秒輕鬆生成圖片

Arc 瀏覽器 windows 版測試心得,用四大介面改造升級專注工作流

Google Maps 我的地圖完全教學!規劃自助旅行攻略

個人知識管理的時間平衡心法,忙碌中我如何維持高效率輸入輸出

5 條「這時候,不要做」清單打破無意識行動模式的低效率循環

如何用 ChatGPT 加速生成一份有圖有文的簡報,實戰案例教學

Google 表單的 10 個專業問卷調查設計秘密教學

ChatGPT DALL-E 3 的7個特殊 AI 繪圖應用教學,勝過 Midjourney