我正在使用XUL开发一个firefox附加组件,我想测量和分析我的扩展内存使用情况。
我怎样才能做到这一点?并检查哪个函数占用的内存最多以及我的扩展程序向firefox添加了多少内存使用量?
答案 0 :(得分:6)
您无法衡量单个功能的影响,Firefox中的内存管理在此级别无效 - 它适用于隔离专区。如果您的扩展程序有自己的窗口,那么您将能够在about:memory?verbose
下看到此窗口的隔离专区(单击“最小化内存使用情况”,否则您可能会看到那些将被垃圾收集的对象)。如果您的扩展程序的代码在浏览器窗口的上下文中运行,那么您通常会运气不好 - 您将无法将其与在那里运行的其他脚本区分开来。它与XPCOM组件和JavaScript模块相同 - 所有这些都被加载到“[System Principal]”隔间。
你可以做些什么来让你的脚本与大隔间分开:使用沙箱,沙箱总是有自己的隔间。例如,在浏览器窗口中,您可以执行以下操作:
Components.utils.import("resource://gre/modules/Services.jsm");
var mySandbox = Components.utils.Sandbox(window,
{sandboxName: "myExtension/browserScript.js"});
mySandbox.window = window; // Expose window variable to scripts in the sandbox
Services.scriptloader.loadSubScript("chrome://myextension/content/browserScript.js",
mySandbox);
mySandbox.init(); // Call function init() of the script in the sandbox
因此,名为myExtension/browserScript.js
的隔离专区将显示在about:memory?verbose
下,您将能够看到此脚本(以及它创建的对象等)的内存量是多少。要记住的事情:
window
变量一样)。更新:从Firefox 13开始,情况发生了变化。例如,this extension将显示当前内存中的所有对象。虽然距离感觉还不舒服,但整体情况并非平凡 - 但它可以让您在隔间以下的水平上获得粒度。