¡Cómo siento tu dolor!
Como a muchos, me resultó difícil llegar a la esencia de Node.js porque la mayoría de las personas solo escriben / hablan sobre la parte de Node que les resulta útil, y la parte que encuentran interesante suele ser un beneficio secundario de Node en lugar de su principal propósito. Debo decir que creo que es una locura que la gente diga que Node es solo un tiempo de ejecución de JavaScript. El uso de JavaScript por parte de Node, y su selección del tiempo de ejecución de V8, son simplemente un medio para un fin , las mejores herramientas para el problema que los desarrolladores de Node querían resolver.
El objetivo principal de Node era hacer que la gestión de eventos de usuario en una aplicación web fuera más eficiente. Entonces, Node es abrumadoramenteutilizado en el back-end de una aplicación web. La gestión de eventos exige que algo esté escuchando en la máquina del servidor para estos eventos de usuario. Por lo tanto, se debe configurar un servidor http para enrutar cada evento a su script de controlador apropiado. Node proporciona un marco para configurar rápidamente un servidor para escuchar en un puerto dedicado las solicitudes de los usuarios. El nodo usa JavaScript para el manejo de eventos porque JavaScript tiene funciones de devolución de llamada: esto permite suspender una tarea hasta que se devuelva el resultado de una tarea dependiente. No muchos otros idiomas tienen esta función y los que la tienen pueden no tener un intérprete tan eficiente como el motor de ejecución V8 de Google. La mayoría de los desarrolladores web conocen JavaScript, por lo que no hay aprendizaje de idiomas adicional con Node. Además, tener funciones de devolución de llamada permite poner todas las tareas del usuario en un solo hilosin tener que aplicar un bloqueo explícito a las tareas que exigen acceso a la base de datos o al sistema de archivos. Y esto es lo que conduce a la eficiencia de ejecución superior de Node bajo un uso concurrente intenso, el propósito principal de su desarrollo.
Para ayudar a los usuarios de Node a escribir rápidamente el código de back-end, los desarrolladores de Node también organizaron una biblioteca JS incorporada para tareas rutinarias (por ejemplo, asuntos relacionados con solicitudes HTTP, codificación de cadenas, secuencias, etc.) y el repositorio de NPM (Node Package Manager) : este es un conjunto de paquetes de script de código abierto mantenido por el usuario para varias funciones estándar y personalizadas. Todos los proyectos de Node permiten la importación de paquetes NPM en un proyecto a través del comando npm install establecido .
Las solicitudes de usuario manejadas a través de Node serán cosas necesarias para la aplicación web como autenticación, consulta de bases de datos, administración de contenido (Strapi CMS), etc. Todo esto se enviará al puerto de Node. (Cuando el análisis de los datos obtenidos de una base de datos requiere mucho tiempo de CPU, es mejor colocar este tipo de proceso en un hilo separado para que no ralentice las solicitudes de usuario más simples). Otros tipos de solicitud de usuario, por ejemplo, para cargar otra página web , descargar CSS / JS / archivos de imagen, etc., continuará siendo enviado por el navegador a los puertos predeterminados en la máquina del servidor donde el programa del servidor web (Apache, NGinx, etc.) los manejará.
Entonces, en la práctica , Node es principalmente un marco para la creación rápida de servidores y el manejo de eventos, pero reemplaza solo algunas de las funciones del programa del servidor web.
Otros usos no backend de Node simplemente explotan una u otra de sus características, por ejemplo, el motor V8. Por ejemplo, las herramientas de compilación de frontend Grunt y Gulp usan Node.js para procesar un script de compilación que se puede codificar para convertir SASS a CSS, minimizar archivos CSS / JS, optimizar el tamaño / carga de la imagen, etc. Pero este tipo de trabajo es realmente solo un subproducto de Node, no su uso principal, que es para hacer procesos de backend eficientes para aplicaciones web.