¿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 primeros dos. Entonces, un tipo de dato incorrecto sigue siendo algo en lo que tenemos que investigar porque esto es algo muy típico que encuentro con frecuencia. A menudo, los programas utilizan tipos de memoria que no son eficientes para la tarea que se desea resolver. Y luego, cuando manejas un data grande como este, vas a asignar una gran cantidad de memoria, aunque no necesitarías eso, simplemente usando un tipo de data diferente.
Usar el tipo de data correcto también puede ayudarte a evitar que tu programa se bloquee en caso de que encuentres un data más grande en algún momento. Y el segundo es que también intentamos ejecutar muchas cosas en paralelo. Probablemente a todos nos encantan las promesas y el 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 aún queremos hacer varias cosas al mismo tiempo, principalmente para tener múltiples llamadas remotas a procedimientos. Pero cuando simplemente usas demasiadas de esas al mismo tiempo, también tenemos que asignar memoria para todas estas etapas. Y cuando aún no se han completado, también pueden causar una excepción en tu programa porque no queda más memoria. Así que esto también es importante tener en cuenta.
Ahora vamos a la primera fuga de memoria real, los escuchadores de eventos. Algo que mucha gente sabe es que en los navegadores, hace algún tiempo, era típico adjuntar escuchadores de eventos inmediatamente a un elemento DOM específico en una lista a la que te importaría que se desencadenara un evento. Y luego a veces tenemos que agregar muchos y muchos escuchadores de eventos a todos estos elementos. En su lugar, quieres tener un solo escuchador de eventos en un nodo superior, que luego escuche todos los eventos que provienen de todos estos nodos inferiores. Y luego no tienes que adjuntar tantos escuchadores porque los escuchadores de eventos también ocupan memoria. Y a veces agregamos un nuevo escuchador de eventos para cada evento entrante. Esto sería un error de programación, pero ocurre con frecuencia.
Y más difícil aún son los closures. Porque a veces los closures evitan que el recolector de basura sepa cuándo una variable ya no se utiliza. Y cuando podemos liberar esa memoria. Así que este es un caso complicado. Luego, los descriptores de archivos también pueden causar problemas. Porque cuando abres un archivo, hay una cantidad limitada de archivos que puedes abrir al mismo tiempo. Y cuando ejecutamos nuestro programa, normalmente funciona, aunque no cerremos el archivo después de abrirlo, eso también puede causar problemas. Y siempre debemos asegurarnos de cerrarlo tanto en caso de éxito como en caso de no éxito. Por lo tanto, siempre debes tener un enlace de archivo que, sin importar si abres el archivo con éxito o no. Porque a veces puede haber algo intermedio y aún lo abres. Pero hubo un error en otro lugar. Y aún tienes que cerrarlo. La parte más complicada es que en JavaScript, y cuando miramos en Chrome o cualquier navegador basado en Chromium y Node.js también se ejecuta con V8, entonces tenemos que conocer algunos detalles de implementación.
Comments