Вы не можете измерить влияние одной функции, управление памятью в 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
в примере). - Отсеки не дешевы, а передача объектов между отсеками недешеваили.Поэтому создание одного отделения для каждой функции было бы плохой идеей из-за накладных расходов.
Документация: Песочница , Services.jsm
Обновление : Начиная с Firefox 13 вещей изменилось.Например, это расширение , которое покажет вам все объекты, которые в данный момент находятся в памяти.Все еще далеко от того, чтобы быть удобным, также получение всей картины нетривиально - но это дает вам детализацию на уровне ниже отсеков.