5 consejos para acelerar el rendimiento de Node.js

5 consejos para acelerar el rendimiento de Node.js

Node.js es conocido como un entorno JavaScript del lado del servidor de E/S impulsado por eventos y un bucle de eventos de un solo hilo basado en el motor V8 ( motor JavaScript de alto rendimiento de código abierto de Google). La arquitectura impulsada por eventos de Node.js es una tecnología muy buena para las aplicaciones en tiempo real, especialmente las aplicaciones de chat y las aplicaciones de streaming. Como tanto el lado del cliente como el del servidor están escritos en JavaScript, el proceso de sincronización que diseñan los hilos simples es mejor y más rápido.


Con una buena productividad en Node.js, prácticamente usted también quiere  ser más óptimo. En este artículo se discutirán 5 maneras de hacer que Node.js sea más rápido y óptimo en el trabajo.


1. Almacenamiento en caché de su aplicación con Redis

¿Qué es el almacenamiento en caché? En el proceso de almacenamiento en caché, Redis como una versión más compleja de Memcached. Redis siempre sirve y modifica los datos en la memoria principal del servidor. El impacto es que el sistema recuperará rápidamente los datos que se necesitan.


También reduce el tiempo para abrir las páginas web y hacer su sitio más rápido. Redis trabaja para ayudar y mejorar el rendimiento de carga de las bases de datos relacionales o NoSQL mediante la creación de una excelente caché en memoria para reducir la latencia de acceso.


Usando Redis podemos almacenar caché usando SET y GET, además de que Redis también puede trabajar con datos de tipo complejo como Listas, Conjuntos, estructuras de datos ordenadas, etc.


Haremos una comparación de 2 trozos de código de Node.js. El siguiente es cuando intentamos recuperar datos de la API de Google Book, sin poner Redis en el endpoint.


Node.js sin Redis:

Y ahora, pondremos un Redis en este endpoint. Si tienes problemas al usar Redis, puedes leer la documentación completa de Redis en Node.js aquí.


Node.js con Redis:

Puedes ver, el código anterior explica que Redis almacenará los datos de la caché con el valor de la clave única que hemos especificado, utilizando esta función:


Y tomar los datos de la caché utilizando la función de abajo:


Este es el resultado de las pruebas de ambos códigos. Si no usamos Redis como caché, tarda al menos 908,545 ms


Muy diferente, cuando Node.js utiliza Redis. Mira esto, es muy rápido, sólo tarda 0,621 ms en recuperar los datos en el mismo endpoint:


2. Asegúrese de que su consulta está optimizada

Básicamente, el proceso generado por la base de datos en la consulta afecta en gran medida el rendimiento.


Cuando el punto final genera datos que son llamados por el sistema. Una mala consulta, hará que el proceso de visualización de los datos se vuelva muy lento.


Por ejemplo, si tenemos un dato en MongoDB, el problema es cuando tenemos 4 millones de filas de datos, para encontrar 1 palabra clave de datos deseados, sin utilizar el esquema de índice que será hacer el proceso de consulta muy lento.


Con MongoDB, podemos analizar cómo puede funcionar un proceso de consulta. Puedes añadir esta consulta : explain("executionStats") para analizar y encontrar los datos del usuario de tu colección.


Mire esto, antes de crear el índice, responda la consulta al buscar datos.


De los resultados JSON anteriores, hay 2 puntos importantes que podemos analizar que son


Aquí es cuando tratamos de agregar un correo electrónico de índice a la colección de usuarios.


El resultado del análisis de la consulta después de añadir el correo electrónico del índice:


Puede ver, en el punto totalDocsExamined, MongoDB sólo busca 1 dato relacionado, esto hará que el proceso de consulta sea más rápido y eficiente. Esta es la ventaja cuando se añade el índice a MongoDB. Al añadir un índice, también será útil cuando quiera ordenar los datos en una colección.


3. Compruebe todas las secuencias de comandos de error con el registro

¿Por qué es importante el registro? La primera es que debes asegurarte de que tu programa de aplicación se ejecuta correctamente, sin ningún error fatal. Si en algún momento encuentra algo extraño en su programa, es el momento de averiguar qué código produce el error. Con el registro, puedes rastrear la actividad y el tráfico del proceso de la API.


El proceso de registro que la gente suele utilizar es usar console.log ('Log Output') por defecto insertará algunos registros en el estándar de salida (stdout) y console.error ('Log Error') también irá en el estándar de error (stderr). Sin embargo, le recomiendo que utilice un módulo de registro más popular y eficiente, como Winston, Morgan y Buyan.


Daré un ejemplo de cómo estamos registrando usando Winston . En general, Winston tiene 4 niveles personalizados que podemos usar como: error, warn, info, verbose, debug, y silly.


Algunas características que se pueden utilizar en Winston:


  • Posibilidad de utilizar varios transportes del mismo tipo
  • Perfiles sencillos
  • Admite la consulta de los registros
  • Posibilidad de capturar y registrar uncaughtException
  • Estableciendo el nivel de su mensaje de registro
  • En primer lugar necesitamos instalar Winston e incluirlo en el nuevo proyecto o en el que hayas desarrollado. Ejecute el siguiente comando para hacerlo:

En primer lugar necesitamos instalar Winston e incluirlo en el nuevo proyecto o en el que hayas desarrollado. Ejecute el siguiente comando para hacerlo:


Esta es la configuración básica que utiliza Winston:


Del código anterior sabemos que, utilizamos la configuración de múltiples transports, con 2 niveles de registro que son verbose y error.


4. Implementar HTTP/2

HTTP/2, comúnmente llamado SPDY, es el último estándar de protocolo web desarrollado por el grupo de trabajo HTTP del IETF. HTTP/2 hace que la navegación web sea más rápida, más fácil y con un menor uso del ancho de banda. Se centra en el rendimiento, especialmente para resolver los problemas que aún se producen en las versiones anteriores de HTTP/1.x. Actualmente, se puede ver que algunas webs populares como google, facebook y youtube, han implementado el protocolo HTTP/2 en su página web.


¿Por qué es mejor que HTTP/1.x?

  • Multiplexación: La multiplexación permitirá que múltiples peticiones y mensajes de respuesta recuperen recursos en una única conexión TCP simultáneamente.
  • Compresión de cabeceras: Cada solicitud a través de HTTP contiene información de cabecera. Con HTTP/1.1, muchas cabeceras se repiten en una sesión y duplican la misma información. Esta sobrecarga es considerable, HTTP/2 elimina el exceso de cabeceras mientras presiona las restantes y obliga a enviar todas las cabeceras HTTP en un formato comprimido.
  • Empuje del servidor: Con HTTP/1.1 se debe esperar a que el cliente envíe la conexión. Server Push permite al servidor evitar retrasos en el envío de datos "empujando" las respuestas que dice que el cliente necesita para almacenarlas en la caché y automáticamente esto acelerará el tiempo de carga de la página reduciendo el número de peticiones.
  • Formato binario : HTTP / 1.1 envía datos en formato textual, mientras que HTTP/2 envía datos en formato binario. Los protocolos binarios son más eficientes de analizar y reducen el número de errores, en comparación con las versiones anteriores de los protocolos textuales.

Para implementar los protocolos Transport Layer Security (TLS) y Secure Socket Layer (SSL) que se basan en OpenSSL. Puedes crear un certificado SSL autofirmado para generar el server.key y server.crt a través de aquí.


Debido a que el soporte de HTTP/2 es todavía experimental, Node.js debe ser lanzado con la línea de comandos --expose-http2 :


Ahora es el momento de comprobar si un sitio web utiliza el nuevo protocolo HTTP/2.


5. Agrupando(CLUSTERING) su Node.js

Por defecto, Node.js se ejecuta en un solo hilo en un solo núcleo del procesador. y no utiliza varios núcleos que pueden estar disponibles en un sistema. Pero ahora, con el clúster en Node.js, permite crear fácilmente procesos hijos que comparten todos los puertos del servidor. esto significa que el clúster puede manejar un gran volumen de peticiones con sistemas de múltiples núcleos. Y automáticamente, esto aumentará el rendimiento de su servidor.


Modulo Cluster 

Node.js ha implementado los módulos de clúster del núcleo, que permiten que las aplicaciones se ejecuten en más de un núcleo. El módulo de clúster un proceso padre/maestro puede ser bifurcado en cualquier número de procesos hijos/trabajadores y comunicarse con ellos enviando mensajes a través de la comunicación IPC.


Cuando se ejecuta el nodo, aparece que hay 4 trabajadores actualmente en uso en Node.js con un cluster.


Clustering de Node.js con PM2

PM2 es un gestor de procesos de producción para aplicaciones Node.js con un equilibrador de carga incorporado. Permite mantener las aplicaciones vivas para siempre, recargarlas sin tiempo de inactividad y facilitar las tareas comunes de administración del sistema. Una de sus mejores características es el uso automático de la API de Cluster de Node. PM2 le da a su aplicación la capacidad de ser ejecutada como múltiples procesos, sin ninguna modificación de código. 


Con el siguiente comando, PM2 generará automáticamente tantos trabajadores como núcleos de CPU tenga. Iniciemos y los siguientes comandos para habilitar el cluster usando PM2:


Ahora usted puede ver, cómo PM2 clúster ha escalado a través de todas las CPUs disponibles


En general, el clúster PM2 es una poderosa herramienta que realmente puede mejorar la concurrencia y el rendimiento general de su Node.js. Esto es más fácil que usted está utilizando un módulo de clúster existente en Node.js Core.


Reactions

10

2

1

1

Access hereTo be able to comment

TheWhiteCode.com is not the creator or owner of the images shown, references are: