Tengo una aplicación Javascript bastante compleja, que tiene un bucle principal que se llama 60 veces por segundo. Parece que hay una gran cantidad de recolección de basura (según la salida de 'diente de sierra' de la línea de tiempo de la memoria en las herramientas de desarrollo de Chrome), y esto a menudo afecta el rendimiento de la aplicación.
Entonces, estoy tratando de investigar las mejores prácticas para reducir la cantidad de trabajo que tiene que hacer el recolector de basura. (La mayor parte de la información que he podido encontrar en la web se refiere a evitar fugas de memoria, lo cual es una cuestión ligeramente diferente: mi memoria se está liberando, es solo que hay demasiada recolección de basura). que esto se reduce principalmente a reutilizar objetos tanto como sea posible, pero por supuesto, el diablo está en los detalles.
La aplicación está estructurada en 'clases' siguiendo las líneas de Herencia de JavaScript simple de John Resig .
Creo que un problema es que algunas funciones se pueden llamar miles de veces por segundo (ya que se usan cientos de veces durante cada iteración del bucle principal) y quizás las variables de trabajo locales en estas funciones (cadenas, matrices, etc.) podría ser el problema.
Soy consciente de la agrupación de objetos para objetos más grandes / pesados (y usamos esto hasta cierto punto), pero estoy buscando técnicas que se puedan aplicar en todos los ámbitos, especialmente en relación con funciones que se llaman muchas veces en bucles estrechos .
¿Qué técnicas puedo utilizar para reducir la cantidad de trabajo que debe hacer el recolector de basura?
Y, quizás también, ¿qué técnicas se pueden emplear para identificar qué objetos se recolectan más basura? (Es una base de código muy grande, por lo que comparar instantáneas del montón no ha sido muy fructífero)