¿Cuáles son las fugas de memoria o problemas típicos? Esto no está en un orden específico y no todos son fugas de memoria reales, por ejemplo, los dos primeros. Entonces, un tipo de dato incorrecto es algo que todavía tenemos que investigar porque esto es una cosa muy típica que encontré frecuentemente. A menudo los programas usan tipos de memoria que no son eficientes para la tarea que quieres resolver. Y luego, cuando manejas datos grandes, vas a asignar una gran cantidad de memoria, aunque no necesitarías eso, simplemente usando un tipo de dato diferente.
Así que usar el tipo de dato correcto también puede ayudarte a prevenir que tu programa se bloquee en caso de que alguna vez encuentres datos más grandes. Y el segundo es que también intentamos ejecutar muchas cosas en paralelo. Probablemente a todos nos encantan las promises y async await, y usamos promise all para mejorar el rendimiento de la aplicación, porque normalmente, como con Node, las cosas se ejecutan en un solo hilo y todavía queremos hacer múltiples cosas a la vez, básicamente, para tener múltiples llamadas de procedimiento remoto. Pero cuando usas demasiados de esos al mismo tiempo, también tenemos que asignar memoria para todas estas etapas. Y cuando aún no han terminado, también podrían causar una excepción en tu programa porque no queda más memoria. Así que esto también es importante de investigar.
Ahora vamos al primer bucle de memoria real, los event listeners. Así que algo que mucha gente sabe es que en los navegadores, como hace un tiempo, era típico simplemente adjuntar event listeners inmediatamente a un elemento DOM específico en una lista de la que te importaría que un evento se disparara. Y luego a veces tenemos que simplemente agregar muchos y muchos event listeners a todos estos elementos. En su lugar, quieres tener un solo event listener en un nodo superior, que luego escucharía todos los eventos provenientes de todos estos nodos debajo. Y luego no tienes que adjuntar tantos listeners porque los event listeners también se suman en memoria. Y a veces simplemente agregamos un nuevo event listener para cada evento entrante. Esto sería un error de programación, pero ocurre frecuentemente.
Y más difícil aún son los closures. Porque a veces los closures impiden que el recolector de basura sepa cuándo una variable ya no se usa. Y cuándo podemos disponer de esa memoria. Así que este es complicado. Luego los file descriptors también pueden causar problemas. Porque cuando abres un archivo, hay una cantidad limitada de archivos que puedes abrir al mismo tiempo. Y cuando simplemente ejecutamos nuestro programa, normalmente funciona, aunque no cerremos el archivo después de abrirlo, eso también puede causar problemas. Así que siempre tenemos que asegurarnos de cerrarlo tanto en caso de éxito como de no éxito. Así que siempre deberías tener como un enlace de archivo que no importa si estás abriendo exitosamente ese archivo o no. Porque a veces puede haber algo en el medio y aún lo abres. Pero hubo un error en otro lugar. Y aún tienes que cerrar ese. La parte más complicada es que en JavaScript, y cuando miramos en Chrome o cualquier navegador Chromium y Node.js también se ejecuta con V8, entonces tenemos que conocer algunos detalles de implementación.
Comments