2012-02-06 10 views
7


Estoy desarrollando un complemento de Firefox usando XUL, y quiero medir y perfilar el uso de mi memoria de extensión.
¿Cómo puedo hacer esto? y compruebe qué función está tomando el mayor uso de memoria y cuánto uso de memoria está agregando mi extensión a Firefox.

Cómo medir el uso de memoria adicional de Firefox

+0

no estoy seguro de si te ayudaría en absoluto ... pero puedes escribir "about: memory" en la barra de direcciones, pero no creo que sea tan granular como esperas. –

+0

about: memory no es útil en absoluto, para entender algo allí, necesito aprender cómo funciona la memoria de Firefox ... y esto es demasiado. – Yosi

Respuesta

6

No se puede medir el impacto de una sola función, la gestión de la memoria en Firefox no funciona en este nivel; funciona con compartimentos. Si su extensión tiene su propia ventana, entonces podrá ver el compartimento de esta ventana en about:memory?verbose (haga clic en "Minimizar el uso de la memoria", de lo contrario, podría ver objetos que se recogerán de todos modos). Si el código de su extensión se ejecuta en el contexto de la ventana del navegador, generalmente no tiene suerte; no podrá distinguirlo de los otros scripts que se ejecutan allí. Lo mismo ocurre con los componentes de XPCOM y los módulos de JavaScript: todos se cargan en el compartimento "[Principal del sistema]".

Lo que puede hacer para obtener sus secuencias de comandos separadas de un compartimiento grande sin embargo: use cajas de arena, una caja de arena siempre tiene su propio compartimento. Por ejemplo, en una ventana del navegador que usted haría algo como esto:

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 

Como resultado, un compartimiento llamado myExtension/browserScript.js se mostrará bajo about:memory?verbose y usted será capaz de ver la cantidad de memoria este guión (junto con objetos crea exactamente etc.) toma exactamente. Cosas a tener en cuenta:

  • El script en el sandbox no tendrá acceso a las variables desde "afuera". Debe establecer explícitamente estas variables como propiedades del entorno limitado (como he hecho con la variable window en el ejemplo).
  • Los compartimentos no son baratos, y el paso de objetos entre compartimentos tampoco es barato. Entonces, crear un compartimento para cada función sería una mala idea debido a los gastos generales involucrados.

Documentación: Sandbox, Services.jsm

actualización: A partir de Firefox 13 cambió las cosas. Hay this extension por ejemplo que le mostrará todos los objetos actualmente en la memoria. Aún lejos de ser cómodo, obtener la imagen completa no es trivial, pero le da granularidad en un nivel inferior a los compartimentos.

+0

Muchas gracias, mi código se está ejecutando en sandbox, todo lo que necesito ahora es solo agregar los nombres a mi sandbox y luego puedo crear un perfil, ¡gracias! – Yosi

+1

@Yosy: mira la actualización de mi respuesta, ahora puedes ver el gráfico completo de los objetos de JavaScript. –

+0

Gracias Vladimir, gracias a la respuesta original que optimicé el uso de mi memoria en mi extensión, revisaré esta extensión :) – Yosi

Cuestiones relacionadas