Google V8 JavaScript Runtime Engine + TypeScript: mejoras en el servidor Node.js

La Node.js El estándar de servidor web fue introducido en 2009 por Ryan Dahl y posteriormente se ha convertido en un aspecto importante de las plataformas de desarrollo JavaScript contemporáneas. Los servidores web Apache funcionan sobre la base de procesos con subprocesos, mientras que los servidores Node.js funcionan con bucles de eventos. Con muchos usuarios simultáneos, la concurrencia de subprocesos se vuelve “con fugas” en Apache, mientras que los servidores Node.js usan devoluciones de llamada para eliminar los tiempos de espera para tasas de concurrencia extremadamente rápidas. JavaScript opera por diseño sobre la base de bucles de eventos que Dahl transcribió en un entorno de tiempo de ejecución del lado del servidor para construir un servidor web con una estructura de procesamiento de solicitudes de E / S sin bloqueo. Esto permite a los programadores de aplicaciones de Node.js programar programas altamente concurrentes en el mismo hardware que transmiten datos a velocidades más rápidas y, al mismo tiempo, admiten TCP, DNS y HTTP sin Apache. El uso de solicitudes / respuestas fragmentadas, funciones de mantenimiento de vida y API familiares que operan de manera independiente de la plataforma ha llevado al éxito de Node.js como estándar de servidor web, aunque también incluye una dependencia de Python. Casi 10 años después, Dahl ha deconstruido los errores que aún están presentes en Node.js para relanzar una nueva plataforma escrita en Rust / Go que funciona con TypeScript y el motor de tiempo de ejecución de Google V8 en un entorno seguro de caja de arena.

Deno 2018: soporte experimental, de desarrollo y limitado a TypeScript

El primer lanzamiento de Deno en 2018 atrajo mucha atención positiva en la comunidad de desarrollo de JavaScript porque fue inventado por el creador original de Node.js. Dahl presentó un seminario en la convención de JavaScript 2018 JSConf.EU que se tituló “10 cosas de las que me arrepiento de Node.js”. Dahl lamentó que muchos de los problemas estructurales que ha encontrado en el marco ya no se pueden cambiar porque muchos proyectos de JavaScript diferentes se basan en la base de Node.js tal como está diseñada actualmente. A partir de esta doble realización, Dahl pasó a codificar una versión beta de Deno.

“Usar Node es como una especie de clavos en la pizarra para mí. Veo que los errores que introduje no son realmente errores en este punto, son solo cómo funcionan, pero son errores y se cometieron errores de diseño que simplemente no se pueden corregir ahora porque hay mucho software que lo usa “.

Según los informes, Dahl pasó 2017 como miembro de la Programa de residencia de Google Brain trabajar con TensorFlow y problemas relacionados con el reprocesamiento de videos. Para comprender el cambio de perspectiva con respecto a la plataforma Node.js, se recomienda comparar los dos videos:

Ryan Dahl: Presentación original de Node.js (2009)

  • “… V8: Google
  • libev: biblioteca de bucles de eventos
  • libeio: biblioteca de grupo de subprocesos
  • http-parser: un analizador HTTP de ragel
  • evcom: Transmitir biblioteca de socket en la parte superior de libev
  • udns: solucionador de DNS sin bloqueo … “

Obtenga más información sobre el diseño del servidor web Node.js original.

Diez cosas de las que me arrepiento de Node.js – Ryan Dahl – JSConf EU (2018)

  • “Soporta TypeScript listo para usar.
  • Utiliza una versión reciente de V8.
  • No hay package.json.
  • No npm.
  • No es explícitamente compatible con Node.
  • Importa solo URL de código fuente de referencia.
  • El sistema de archivos y el acceso a la red se pueden controlar para ejecutar código de espacio aislado.
  • Ejecutable único “.

Más información sobre Deno: un tiempo de ejecución seguro de TypeScript integrado en V8.

Problemas en Node.js: seguridad web, módulos, Index.js y el proceso de compilación

Al presentar Deno En el evento JSConf.EU, Dahl declaró que el descubrimiento de que “JavaScript del lado del servidor requería un bucle de eventos para tener éxito” fue la mayor parte de la adopción generalizada de Node.js en la práctica de TI. Dahl abandonó el proyecto Node.js en 2012 después de que se establecieran los protocolos para el soporte HTTP y SSL. En ese momento, Node.js tenía un núcleo pequeño, compatibilidad con Windows Server y un sistema estable de API, así como un ecosistema creciente de módulos externos a través de NPM. Durante los últimos 6 meses, Dahl reinició la codificación en la plataforma con diferentes objetivos.

En términos de arrepentimientos por el proyecto del servidor web Node.js, Dahl declaró:

  • arrepentirse: sin uso de promesas para asynch / await
  • arrepentirse: seguridad web, permisos de escritura y acceso a archivos
  • arrepentirse: el sistema de compilación (GYP / GN / Python)
    —> mejor hubiera sido una interfaz de función externa (FFI)
  • arrepentirse: Dependencias del repositorio central JSON y NPM
  • arrepentirse: node_modules demasiado pesados ​​y, a menudo, necesarios sin la extensión
  • arrepentirse: Index.js complica el sistema de carga de módulos y es demasiado “lindo”

En general, Dahl admitió que todavía le gusta Node.js, la estructura de E / S y la programación en la plataforma, pero creó el entorno de ejecución Deno para abordar estos lamentos con un nuevo producto.

Instale Deno usando Bash:

alias file_server="deno 

  https://deno.land/x/net/file_server.ts --allow-net"

Actualice a la última versión publicada de Deno:

file_server --reload

Más información sobre el entorno de ejecución del servidor web Deno para TypeScript.

Deno: Observación de productos principales para compatibilidad con Node.js, JavaScript y TypeScript

Deno utiliza JavaScript como una caja de arena segura y permite a los usuarios optar por una red segura en tiempo de ejecución. No permite enlazar funciones nativas arbitrarias en V8. En cambio, todas las llamadas al sistema se realizan mediante el paso de mensajes. Actualmente, Deno no admite la compatibilidad con otros módulos de Node.js, sino que se centra únicamente en la compatibilidad con TypeScript. Todos los archivos importados deben requerir una extensión de archivo y usar instantáneas V8 para acelerar los tiempos de inicio en la compilación. Actualmente, Dahl está programando Deno en C ++, Go y Rust. Muchos de los avances y cambios introducidos por Deno tienen una buena posibilidad de reincorporarse al proyecto Node.js eventualmente. Deno es un proyecto importante a tener en cuenta para el futuro del desarrollo de JavaScript, TypeScript y Node.js.

Nodo EventMachine :: run (): “Como un tiempo de ejecución de JavaScript impulsado por eventos asincrónicos, Node está diseñado para crear aplicaciones de red escalables … Esto contrasta con el modelo de concurrencia más común de hoy en día donde se emplean subprocesos del sistema operativo. Las redes basadas en subprocesos son relativamente ineficientes y muy difíciles de usar. , los usuarios de Node están libres de preocupaciones de bloquear el proceso, ya que no hay bloqueos. Casi ninguna función en Node realiza E / S directamente, por lo que el proceso nunca se bloquea. Debido a que nada bloquea, los sistemas escalables son muy razonables para desarrollar en Node … Node es similar en diseño e influenciado por sistemas como Ruby’s Event Machine o Python’s Twisted. Node lleva el modelo de eventos un poco más allá. Presenta un bucle de eventos como una construcción en tiempo de ejecución en lugar de como una biblioteca “. Más información sobre Node.js.