Yos*_*osi 7 memory firefox profiling xul firefox-addon
我正在使用XUL开发一个firefox附加组件,我想测量和分析我的扩展内存使用情况.
我怎样才能做到这一点?并检查哪个函数占用的内存最多以及我的扩展程序向firefox添加了多少内存使用量?
您无法衡量单个功能的影响,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
Run Code Online (Sandbox Code Playgroud)
因此,myExtension/browserScript.js将显示一个调用的隔离专区about:memory?verbose,您将能够看到此脚本(以及它创建的对象等)的内存大小.要记住的事情:
window在示例中使用变量一样).更新:从Firefox 13开始,情况发生了变化.有此扩展名,例如,将当前显示你在内存中的所有对象.虽然距离感觉还不舒服,但整体情况并非平凡 - 但它可以让您在隔间以下的水平上获得粒度.