La última versión principal de NODE.JS ofrece muchas mejoras significativas a la comunidad de JavaScript, que incluye un motor de JavaScript actualizado, la versión 5 de NPM, la API V8, NODE.JS de Google, Async_hooks, un analizador de URL de Whatwg, más tampones y más seguros. Aquí le actualizaremos sobre estas características y los otros aspectos más importantes de esta versión.
Node.js 8 se libera bajo el nombre del código de carbono, y está disponible ahora de la Sitio node.js . Se trabajará activamente durante otros 18 meses (no hay nuevas características, solo correcciones de errores, mejoras de seguridad y actualizaciones de NPM), antes de ingresar al modo de mantenimiento. Al igual que con los lanzamientos anteriores, durante los lanzamientos de modo de mantenimiento solo recibirán actualizaciones de seguridad crítica y correcciones de errores.
Es seguro decir que, dado que el Nodo.js ha existido, esta es una de las actualizaciones más importantes que se ha recibido el tiempo de ejecución, cambia cómo se escriben los complementos nativos y también brinda mejoras adicionales de seguridad y rendimiento.
Risingstack Ha estado ayudando a las empresas a tener éxito con nodo.js durante cuatro años con capacitación, consultoría o desarrollo. Una de las luchas más importantes que tuvimos fue agregar dependencias nativas a los proyectos.
Antes de Nede.js 8, si las aplicaciones dependían de los módulos con código nativo, siempre que se lleguen las versiones nuevas de NUEVOS NUEVOS, como mantenedor de aplicaciones, tuvo que recompilar sus dependencias. Si tuvieras suerte, trabajaron al principio.
Este proceso fue posible con los tremendos mantenedores de módulos de trabajo puestos en hacer que sus módulos funcionen en versiones incompatibles de Nodo.js, principalmente con la ayuda de un módulo llamado NAN (NODE.JS abstracciones nativas).
Este proceso está lejos de ser ideal, ya que muchas compañías no pudieron obtener sus dependencias actualizadas si no podían compilarse, y también puso una gran carga de trabajo adicional en los mantenedores del módulo. Para resolver este problema, se introdujo la API NODE.JS (o N-API).
La API NODE.JS es una de las mejoras más significativas de NODE.JS 8. Trae una ABI bien definida (una interfaz binaria de aplicación) a NODE.JS para que su máquina virtual se agnóstica. Esto significa que los módulos nativos no solo funcionarán con diferentes versiones de Nodo.js utilizando el motor V8 JavaScript de Google, sino también con el chakra de Microsoft.
Por ahora, la N-API está en un estado experimental, lo que significa que puede suceder cambios significativos tanto para la implementación como a la API. Dicho esto, se alienta a los mantenedores de módulos nativos a probar la nueva interfaz y dar feedback.
Si usted es un mantenedor de módulos, puede liberar una versión N-API de su módulo en paralelo con su versión del módulo principal. Para hacerlo, la recomendación oficial es publicar una versión de su módulo con la etiqueta N-API a NPM.
Para publicar una versión N-API, tiene que:
De esta manera, usted se asegura de que la versión N-API no se convertirá en la última versión, por lo que si alguien instala su módulo, por defecto, obtienen la versión no API de N-N-API.
Hilado, el administrador de paquetes creado por los ingenieros de Facebook, se lanzó en octubre de 2016. Intentó abordar algunas deficiencias del cliente oficial de la NPM, principalmente al ser más actuador y determinista. La mayoría de estas innovaciones también se presentan en NPM 5 también.
Al igual que el hilo, el NPM 5 introdujo un mecanismo de archivos de bloqueo, siempre que esté instalando una nueva dependencia a su proyecto, se agregará automáticamente no solo para Package.json , pero un nuevo archivo llamado Paquete-Lock.Json también.
Puedes preguntar cuál es la diferencia entre Paquete-Lock.Json y npm-shrinkwrap.json ¿A medida que NPM-Shinkwrap ha estado en NPM desde siempre? Larga historia corta, son esencialmente lo mismo, pero Paquete-Lock.Json se crea automáticamente.
Su propósito es describir exactamente qué Tree NPM de dependencia debe crear para su paquete. Si tienes ambos, NPM-Shrinkwrap Tendrá prioridad. Basado en la recomendación de NPM, deberías usar npm-shrinkwrap.json Si desea publicarlo, por lo que sus consumidores de módulos también lo usarán. Por otro lado, debe usar el paquete-lock.json internamente, incluso en los repositorios.
Pero las mejoras a la NPM 5 no se han detenido con agregar un archivo de bloqueo, con la nueva versión, todos los módulos que está instalando se guardan automáticamente también, y se agregarán tanto a su Package.json y Paquete-Lock.Json expediente.
La forma en que funcionan los scripts de NPM también ha cambiado un poco. En primer lugar, los scripts preinstalados ahora se ejecutan antes de todo lo demás, para que puedan modificar el directorio node_modules antes de que la CLI lo lea. Además de esto, se han agregado dos nuevos scripts: Prepack y PostPack. Ambos se ejecutan en NPM Pack y NPM Publish también, pero no en la instalación de NPM.
En el corazón de Node.js, es el motor JavaScript que interpreta su código JavaScript, crea BYTECODE de él y permite que su aplicación se ejecute. Con la nueva versión de Nodo.js 8, esto también se actualizó.
Con el motor V8 actualizado, se introducen mejoras importantes de rendimiento, pero lo que es más importante, se le garantiza que tenga una interfaz binaria de aplicación compatible con adelante. Esto significa que el nodo.js podrá actualizar el motor V8 sin una versión importante de Nodo.js.
Esto es crucial, ya que las versiones más nuevas del motor V8 introducirán un nuevo canal de compilador, que introducirá más mejoras de rendimiento en NODE.JS. Esta actualización era tan importante que era la razón por la que se pospuso la fecha de lanzamiento de Nodo.js 8 original.
La tubería actual es demasiado compleja, y la introducción de nuevas funciones de idioma generalmente significa tocar varias partes de la tubería. Con la nueva tubería, se convertirá mucho más sencillo.
La ignición, el nuevo intérprete y TurboFan, el nuevo compilador de optimización, han estado en desarrollo durante casi tres años y medio. Son las bases en las que se construirán las características de un nuevo idioma. Incluyen la experiencia que el equipo V8 en Google se recolectó de medir las solicitudes de JavaScript de la vida real.
Para comprender mejor qué son los ganchos de ASYNC, vamos a dar un paso atrás y ponernos a sujeción con el almacenamiento local de continuación primero. Trabajan como el almacenamiento local de hilos en la programación roscada, pero en el nodo.js utiliza devoluciones de llamada para pasar el contexto.
Imagine que está escribiendo una aplicación que obtiene un producto de la base de datos, luego, más adelante, desea enviarlo en su respuesta HTML:
Const CreatenamesPace = Requerir ('Continuación-Local-Storage'). CreatenamesPace
session const = createnamespace ('My-App-Session')
const db = requiere ('./ db.js')
Función OneRequest (Opciones, Siguiente) {
db.fetchuserbyid (options.id, función (error, usuario) {
if (error) {
volver a continuación (error)
}
Session.Set ('usuario', usuario)
próximo()
})
Más adelante, si desea acceder al objeto del usuario, todo lo que necesita hacer es capturarlo desde el almacenamiento local:
Const GetNamesPace = Requerir ('Continuación-Local-Storage'). GetNamesPace
Const Session = GetNamesPace ('Mi sesión')
const render = requieren ('./ render.js')
Función Finalizar (Respuesta) {
const user = session.get ('usuario')
Render ({Usuario: Usuario}). Tubería (Respuesta)
}
Esta técnica es utilizada ampliamente por los proveedores de monitoreo de desempeño de la aplicación, como TRACE por RisingStack, para mantener el contexto de ejecución y recopilar información de monitoreo de los sistemas de producción.
Con los ganchos de ASYNC, una característica similar se mueve al núcleo del nodo.js: ayuda a realizar un seguimiento de las solicitudes y manejadores asíncronos a través de su ciclo de vida. los async_hooks El módulo proporciona una API para registrar devoluciones de llamada que rastrean la vida útil de los recursos asíncronos creados dentro de una aplicación node.js.
Antes de Node.js 8, si quisiera usar los módulos principales en una aplicación que usa promesas, tuvo que envolver manualmente los módulos básicos para que puedan usarse de la misma manera. Parecía algo así:
Const FS = requieren ('FS')
Función readfilepromise (... args) {
devuelva la nueva promesa ((resolución, rechazo) = & gt; {
FS.ReadFile (... Args, (Err, Resultados) = & gt; {
if (err) {
Resolución de retorno (ERR)
}
resolución (resultado)
})
})
}
readfilepromise ('./ PAQUETES.JSON', 'UTF-8')
.Ten ((res) = & gt; console.log (res))
.catch ((error) = & gt; console.log (err))
Con nodo.js 8, se agrega un nuevo método de ayudante al módulo UTIL Core, Utile.Promisify. Permite que las API de estilo de devolución de devolución de devolución de llamada estándar se envuelven en una función que devuelve las promesas.
Usando esta función, el fragmento anterior se simplifica y se convierte en esto:
Const FS = requieren ('FS')
Const Promisify = Requerir ('Util'). Promisify
readfilepromise = promised (fs.readfile)
readfilepromise ('./ PAQUETES.JSON', 'UTF-8')
.Ten ((res) = & gt; console.log (res))
.catch ((error) = & gt; console.log (err))
Antes de NOde.js versión 8, los buffers asignados usando el nuevo búfer (número) constructor no inicializó el espacio de memoria con ceros. Como resultado, las nuevas instancias de búfer podrían contener información confidencial, lo que lleva a problemas de seguridad graves, incluso los módulos populares como la mangosta, el WS o el módulo de solicitud se vieron afectados.
Pero, ¿cómo llegamos allí? Cuando JavaScript se movió desde el navegador al lado del servidor, se necesitó una necesidad de procesamiento de datos rápido y fácil, por lo que se agregó la clase de búfer. El búfer es una matriz mutable de datos binarios. Cuando se usa con el constructor que solicita el tamaño del nuevo búfer, acaba de reservar el espacio de memoria, pero no lo limpió.
A medida que su servidor puede servir a varios usuarios al mismo tiempo (a diferencia de su navegador), es posible que el espacio de memoria recién asignado contenga información confidencial de otros usuarios (¡incluso las contraseñas!), Y potencialmente se pueden exponer a un atacante.
Si bien fue una decisión intencional de aumentar el desempeño de la nueva creación de buffer, para la mayoría de nosotros, no fue el uso previsto, incluso si se documentó. Debido a esto, comenzando con nodo.js 8, los buffers asignados utilizando un nuevo búfer (número) o búfer (número) se llenarán automáticamente con ceros.
Antes de Node.js 8, si quisiera depurar sus aplicaciones node.js, una de las soluciones más fáciles fue iniciar el depurador incorporado, utilizando la depuración de nodos index.js. Con nodo.js 8, esto se está eliminando y reemplazado por el inspector de nodos. Todavía puede usar el depurador de CLI, pero se eliminará en breve.
De ahora en adelante, debe usar el nodo --inspect index.js , o nodo --Inspect-Brk index.js Si desea que el depurador coloque un punto de interrupción en la primera línea de la aplicación. Una vez que lo ejecute, recibirá un enlace websocket que Google Chrome puede usar para conectar su depurador.
Deberías ir a Chrome: // inspeccionar En su navegador Chrome, y recomendará automáticamente la aplicación EveryNeN.js, lo que le permitirá conectarse. Después de que se haya conectado a su proceso, obtendrá el depurador de Chrome para inspeccionar su aplicación de nodo.js en ejecución.
Anteriormente, si quisiera verificar un error que recibió en tiempo de ejecución y actuar en consecuencia, en la mayoría de los casos, tuvo que verificar el mensaje de error. Este fue un error propenso, ya que los mensajes de error pueden haber cambiado con las versiones NUEVAS NODE.JS.
Con nodo.js 8, se han asignado códigos de error estáticos a la mayoría de los errores: sigue siendo un trabajo en curso, pero una vez finalizado, estos códigos de error no cambiarán, incluso si el mensaje en el error hace .
Por ejemplo, el recién introducido. Whatwg URL API lanzará un Err_Invalid_url Error en el siguiente fragmento, ya que el parámetro no es una URL válida:
Const URL = Requerir ('URL'). URL
const myurl = nueva URL ('/ foo')
Como puede ver, la publicación de la actualización de NOde.js 8 ha traído muchas mejoras nuevas y emocionantes a la comunidad de JavaScript. Para comenzar a experimentar con todas estas nuevas características, dirígete a nodejs.org ¡Descargue el nodo.js 8 binario y comience a jugar con su nuevo conjunto de herramientas!
Este artículo apareció originalmente en revista neta Número 296. Cómpralo aquí .
Artículos relacionados:
[dieciséis] (Crédito de la imagen: diseñador web) Tener un área que permita a los usuarios iniciar sesión y descargar o v..
[dieciséis] (Crédito de la imagen: Futuro) Mantener los Bots Siempre es un juego de números, con tristeza, la disponibilida..
[dieciséis] Si te has estado sintiendo atascado en una rutina creativa, puede que valga la pena tener un momento para hacer un balance..
[dieciséis] Aprendizaje automático. Aprendizaje profundo. Procesamiento natural del lenguaje. Visión por computador. Automatización..
[dieciséis] Los sitios web y las aplicaciones pueden tener varias piezas móviles, incluyendo la creativa frontal, el procesamiento de..
[dieciséis] El artista 3D y el panelista del vértice Maya Jermy le muestra cómo dominar VDM. Ella estará apareciendo en ..
[dieciséis] Ese efecto del portal en Dr Strange fue muy especial. Fue prácticamente el único efecto en la película que no se inclin..
[dieciséis] En este tutorial, tomamos el grabado mecánico Etch Etch un boceto como inspiración e intento de implementar estas caract..