Conceptos básicos
Node.js , o nodo, es una plataforma que permite que JavaScript se ejecute en el lado del servidor. Se puede decir que Node.js fue pionero en el desarrollo modular de javascript . Los primeros requisitos javascript fueron muy simples, y básicamente se escribieron como funciones, seguidas de una escritura orientada al proceso. Más tarde, las ideas de desarrollo orientadas a objetos se introdujeron gradualmente, y luego se escribieron lentamente en clases. Finalmente, la aparición de Node.js comenzó a tener el concepto de desarrollo modular JS, que eliminó el código js hinchado, como los conflictos de nombres y otros problemas de desarrollo.
La característica más importante Node es su adopción de I/O asincrónica y diseño arquitectónico basado en eventos. Node.js es una plataforma que permite que JS se ejecute fuera del navegador. Su objetivo inicial es implementar servidores web I/O impulsados por eventos y sin bloqueo
Node.js es solo un entorno de ejecución JavaScript (o un conjunto de bibliotecas), que complementa los js estándar con las funciones de IO asíncrono, es decir, leer y escribir redes y archivos.
Como biblioteca, no es más que una API de melodía. Además de las devoluciones de llamada de eventos ligeramente antihumanas, no es muy diferente de otros idiomas de fondo (PHP, Python).
Node.js usa un solo modo de subproceso. Cada hilo completa una función. Un proceso puede tener múltiples hilos. Todos los E/S se usan en un método de solicitud asincrónica. Después de completar cada solicitud de E/S asíncrona, se empujará a la cola de eventos y esperará que el proceso del programa procese.
En resumen, la idea central del node es: no bloqueo, de un solo hilo y basado en eventos. (Sincrónico corresponde al bloqueo, asíncrono corresponde al no bloqueo)
Node.JS Diagrama de arquitectura
Solo enhebrado
El entorno de ejecución del idioma javascript es "un solo hilo".
El llamado "hilo único" significa que una tarea solo se puede completar a la vez. Si hay múltiples tareas, debe hacer cola, completar la tarea anterior, ejecutar la siguiente tarea, y así sucesivamente.
La ventaja de este modelo es que es relativamente simple de implementar y el entorno de ejecución es relativamente simple; La desventaja es que mientras haya una tarea que lleva mucho tiempo, las tareas posteriores deben colocarse en cola, lo que retrasará la ejecución de todo el programa. Los navegadores comunes no responden (muerte falsa) a menudo porque un cierto código de Javascript se ejecuta durante mucho tiempo (como un bucle muerto), lo que hace que toda la página esté atrapada en este lugar y no se puede ejecutar otras tareas.
Los cuellos de botella de la mayoría de las aplicaciones web están en I/O , es decir, leer y escribir discos, leer y escribir redes, y leer y escribir bases de datos. Qué estrategia de usar para esperar este período de tiempo se ha convertido en el punto clave para mejorar el rendimiento.
Sincrónico y asincrónico
Para resolver este problema, Javascript divide el modo de ejecución de las tareas en dos tipos: sincrónico (sincrónico) y asíncrono (asíncrono).
"Modo sincrónico" es el modo de la sección anterior. La última tarea espera que la tarea anterior finalice y luego se ejecute. La orden de ejecución del programa es consistente y sincrónica con el orden de disposición de las tareas; El "modo asíncrono" es completamente diferente. Cada tarea tiene una o más funciones de devolución de llamada ( callback ). Después de que termine la tarea anterior, no es la siguiente tarea, pero la función de devolución de llamada se ejecuta. La última tarea se ejecuta sin esperar a que finalice la tarea anterior, por lo que la orden de ejecución del programa es inconsistente y asíncrona con el orden de disposición de las tareas.
El "modo async" es muy importante. En el lado del navegador, las operaciones a largo plazo deben ejecutarse asincrónicamente para evitar que el navegador pierda respuesta. El mejor ejemplo son las operaciones AJAX. En el lado del servidor, el "modo asíncrono" es incluso el único modo, porque el entorno de ejecución es de un solo hilo, si todas las solicitudes http pueden ejecutarse sincrónicamente, el rendimiento del servidor disminuirá bruscamente y pronto perderá su respuesta.
Procesos e hilos
Procesos y hilos en el sistema Mac
De la figura, podemos ver que un proceso puede incluir múltiples hilos. Los procesos son como talleres en proyectos. Los hilos son trabajadores en este taller. En el sistema operativo que introduce subprocesos, generalmente usan procesos como la unidad básica para asignar recursos y subprocesos como la unidad básica para operación independiente y programación independiente. Dado que los hilos son más pequeños que los procesos y básicamente no poseen recursos del sistema, la sobrecarga de la programación será mucho más pequeña, lo que puede mejorar de manera más eficiente el grado de ejecución concurrente entre múltiples programas en el sistema.
la diferencia
La diferencia entre un hilo y un proceso es que el proceso infantil y el proceso principal tienen diferentes espacios de código y datos, mientras que varios hilos comparten espacios de datos, cada hilo tiene su propia pila de ejecución y contador de programa para su contexto de ejecución. La lectura múltiple se usa principalmente para ahorrar tiempo de CPU y usarlo de acuerdo con la situación específica. Se requiere que los recursos de memoria de la computadora y la CPU se utilicen durante la ejecución de un hilo.
Módulos y módulos de paquete
Módulo: un archivo que implementa ciertas funciones específicas para implementar una programación modular. Introducir módulos a través de requerir (nombre del módulo).
- Las funciones en módulos (como variables, funciones) se proporcionan a la persona que llama asignando una propiedad al objeto exports .
¿Cómo usar módulos?
Es muy conveniente usar módulos en el nodo. En el código JavaScript , puede usar directamente la función Global require() para cargar un módulo. Por ejemplo, podemos usar require("http") para cargar el módulo del servidor HTTP que viene con node .
Bolsa
Paquete: un paquete es una carpeta que encapsula módulos para la liberación, actualización, administración de dependencias y control de versiones. Describa la información del paquete a través de paquete.json: archivos de entrada, paquetes externos de dependencia, etc. Instale el paquete a través del comando npm install y use el paquete a través de require .
E/S asíncrono y eventos
El mecanismo asincrónico de Node.js se basa en eventos. Cada I/O es una solicitud. Todas las consultas de I/O de disco, comunicación de red y bases de datos se solicitan de manera que no sea de bloqueo. Los resultados devueltos son procesados por el bucle de eventos. Como se muestra en la figura a continuación:
El proceso Node.js solo procesará un evento al mismo tiempo e ingresará inmediatamente el bucle de eventos para verificar y procesar los eventos posteriores después de la finalización. La ventaja de esto es que la CPU y la memoria existen al mismo tiempo para centralizar una cosa mientras permiten que las operaciones de E/S que requieren mucho tiempo se ejecutan en paralelo lo más posible.
Iniciar programación de nodos
Aquí, le recomiendo que use webstorm para el desarrollo node.js , que es conveniente y rápido, y es mucho más fácil de usar que CMD o terminales en Mac.
En cuanto a la instalación del nodo, por favor Baidu por su cuenta. No voy a entrar en detalles aquí. Echemos un vistazo a la interfaz de programación de nodos en webstorm :
Solo necesitamos hacer clic derecho en la interfaz del código del nodo escrito y hacer clic en Ejecutar, que es conveniente y rápido
La siguiente es la interfaz de salida del nodo:
En Mac , recomiendo las tres herramientas que uso: Coda2, Webstorm y Sublime Text3. Estas son las mejores herramientas de desarrollo que tengo hasta ahora. También podría intentar cuál está más en línea con su gusto.
Para el desarrollo de nodos en webstorm , primero debe configurar ciertos archivos. Todos deberían usar Baidu para hacerlo. Debido a que mi webstorm ha sido configurada, no puedo tomar una captura de pantalla para mostrarle los pasos. Los pasos generales son: debajo del sistema Mac, primero haga clic en webstorm en la barra superior, luego haga clic en perference , luego haga clic en Node.js and NPM , luego haga clic en Configurar en el lado derecho y finalmente se verá como lo siguiente:
Los pasos del proceso en el sistema windows son aproximadamente similares a este proceso. La versión que uso es 8.0.4.
Variables globales
En la programación JS, es mejor agregar la palabra clave VAR a cada variable para evitar contaminar el espacio de nombres global y aumentar el riesgo de acoplamiento de código.
consola
console se utiliza para emitir caracteres a la transmisión de salida estándar ( standout ) y el flujo de error estándar (STDERR).
console.log() Imprime caracteres en la transmisión de salida estándar y termina con una nueva línea, que acepta múltiples parámetros y se emitirá en formato de printf()
console.log(__dirname)输出文件目录Calcular el tiempo de ejecución del código
console.time(label) console.timeEnd(label)Solo necesitamos dar la misma etiqueta al principio y al final, y poner cualquier código que desee calcular el tiempo de ejecución en el medio.
__filename y __dirname
console.log(__filename);// /Users/hwax/Desktop/My Project/avalon/hello.js console.log(__dirname);// /Users/hwax/Desktop/My Project/avalon