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
Respuesta
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.
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
@Yosy: mira la actualización de mi respuesta, ahora puedes ver el gráfico completo de los objetos de JavaScript. –
Gracias Vladimir, gracias a la respuesta original que optimicé el uso de mi memoria en mi extensión, revisaré esta extensión :) – Yosi
- 1. ¿Cómo medir el uso de memoria por conexión Apache activa?
- 2. Cómo medir la memoria gráfica Uso de una aplicación WebGL
- 3. ¿Cómo medir el consumo total de memoria del contenedor STL?
- 4. ¿Cómo medir el uso de memoria de una aplicación Rack o Sinatra?
- 5. ¿Cómo medir el uso del ancho de banda de la memoria en Windows?
- 6. ¿Cómo medir el uso de CPU y memoria del código F #?
- 7. ¿Cómo medir el uso de memoria con C# (como podemos hacer en Java)?
- 8. ¿La mejor manera de medir el uso de la memoria de un programa Java?
- 9. El elemento de entrada (enviar) ocupa espacio adicional en Firefox
- 10. Firefox agrega ancho adicional con relleno
- 11. ¿Tengo una fuga de memoria o solo uso de memoria en Firefox?
- 12. Profiler de memoria de Javascript para Firefox
- 13. ¿Cómo perfil el uso de la memoria?
- 14. cómo reducir el uso de memoria solr?
- 15. En Pharo, ¿cómo se puede medir el consumo de memoria total actual del sistema?
- 16. Cómo reducir el uso de memoria del código python enhebrado?
- 17. limitar el uso de memoria de Node.js
- 18. Limite el uso de memoria de JTextPane
- 19. Las pérdidas de memoria en Firefox addons
- 20. Registrando el uso de la memoria de un objeto
- 21. ¿Cómo medir el rendimiento de escritorio remoto?
- 22. ¿Cómo medir el rendimiento de ARM?
- 23. cómo medir el rendimiento de hibernación?
- 24. Cómo reducir el uso de memoria de imágenes de fondo?
- 25. ¿Cómo funciona realmente el uso de la memoria Apache PHP?
- 26. cómo medir y mejorar el uso de la batería en el iPhone/iPad (también en Android)
- 27. Uso de la memoria de Javascript y depuración en Chrome/Firefox (campo de minas)
- 28. cómo calcular el uso de Java arreglo de memoria
- 29. Cómo reducir el uso de memoria de una aplicación WPF
- 30. Cómo reducir el uso de memoria de Netbeans?
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. –
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