读书人

查询Firefox中全部扩展的体积与内存占

发布时间: 2012-09-06 10:37:01 作者: rapoo

查询Firefox中所有扩展的体积与内存占用情况的方法
原文出处:http://playpcesor.blogspot.com/2010/11/firefox.html,略有改动,转载请注明原始出处。

我之前在博客中提到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资料夹中查看每个套件资料夹所占用的体积,但因为这里每个扩展都是使用代码表示,要找出哪个代码是哪个套件,还要花上不少时间。

注意:安装Firefox扩展时,你会看到下载文件的体积,但这和扩展安装后的体积不同。

首先启动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.0.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;}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 Sync、WOT这两款扩展相对体积庞大(是其它扩展的好几倍)。

然后下图是一个全新的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浏览器间的影响有正确认知即可。

读书人网 >互联网

热点推荐