El autor de Node.js presentó la plataforma segura JavaScript Deno 1.0

Después de dos años de desarrollo presentado primer lanzamiento importante Deno 1.0, una plataforma para la ejecución independiente de aplicaciones en JavaScript y TypeScript, que se puede utilizar para crear controladores que se ejecutan en el servidor. La plataforma está desarrollada por Ryan Dahl (ryan dahl), creador de Node.js. Al igual que Node.js, Deno utiliza un motor JavaScript V8, que también se utiliza en navegadores basados ​​en Chromium. Al mismo tiempo, Deno no es una bifurcación de Node.js, sino un nuevo proyecto creado desde cero. Código de proyecto distribuido por bajo licencia MIT. Ensambles preparado para Linux, Windows y macOS.

Un número de versión significativo está asociado con la estabilización de las API en el espacio de nombres de Deno, que son responsables de la interacción de las aplicaciones con el sistema operativo. Interfaces de software que hasta ahora no estabilizado, están ocultos de forma predeterminada y solo están disponibles cuando se ejecutan en modo “--inestable”. A medida que se formen nuevas versiones, dichas API se irán estabilizando gradualmente. La API en el espacio de nombres global, que incluye funciones comunes como setTimeout() y fetch(), es lo más parecida posible a la API de los navegadores web convencionales y está desarrollada de acuerdo con los estándares web para navegadores. Las API proporcionadas por Rust, que se utilizan directamente en el código de la plataforma, así como la interfaz para desarrollar complementos para el tiempo de ejecución de Deno, aún no se han estabilizado y continúan desarrollándose.

Los motivos clave para crear una nueva plataforma JavaScript fueron el deseo de eliminar errores conceptuales, aceptado en la arquitectura Node.js y proporciona a los usuarios un entorno más seguro. Para mejorar la seguridad, el motor V8 está escrito en Rust, lo que evita muchas de las vulnerabilidades que surgen de la manipulación de la memoria de bajo nivel, como el acceso posterior, desreferencias de puntero nulo y desbordamientos del búfer. La plataforma se utiliza para procesar solicitudes en modo sin bloqueo. Tokio, también escrito en Rust. Tokio le permite crear aplicaciones de alto rendimiento basadas en una arquitectura basada en eventos, que admite subprocesos múltiples y procesa solicitudes de red en modo asíncrono.

El principal Características Deno:

  • Configuración predeterminada orientada a la seguridad. El acceso a archivos, las redes y el acceso a variables de entorno están deshabilitados de forma predeterminada y deben habilitarse explícitamente. De forma predeterminada, las aplicaciones se ejecutan en entornos aislados y no pueden acceder a las capacidades del sistema sin otorgar permisos explícitos;
  • Soporte integrado para TypeScript más allá de JavaScript. El compilador TypeScript estándar se utiliza para verificar tipos y generar JavaScript, lo que genera un impacto en el rendimiento en comparación con el análisis de JavaScript en V8. En el futuro, planeamos preparar nuestra propia implementación del sistema de verificación de tipos TypeScript, que mejorará el rendimiento del procesamiento de TypeScript en un orden de magnitud;
  • El tiempo de ejecución se presenta en forma de un único archivo ejecutable autónomo (“deno”). Para ejecutar aplicaciones usando Deno es suficiente descargar para su plataforma existe un archivo ejecutable, de unos 20 MB de tamaño, que no tiene dependencias externas y no requiere ninguna instalación especial en el sistema. Además, deno no es una aplicación monolítica, sino una colección de paquetes de cajas en Rust (deno_core, oxidado_v8), que se puede utilizar por separado;
  • Al iniciar el programa, además de cargar módulos, puede utilizar el direccionamiento URL. Por ejemplo, para ejecutar el programa bienvenido.js, puede utilizar el comando "deno https://deno.land/std/examples/welcome.js". El código de recursos externos se descarga y almacena en caché en el sistema local, pero nunca se actualiza automáticamente (la actualización requiere ejecutar explícitamente la aplicación con el indicador "--reload");
  • Procesamiento eficiente de solicitudes de red a través de HTTP en aplicaciones; la plataforma está diseñada para crear aplicaciones de red de alto rendimiento;
  • La capacidad de crear aplicaciones web universales que se pueden ejecutar tanto en Deno como en un navegador web normal;
  • disponibilidad conjunto estándar de módulos, cuyo uso no requiere vinculación a dependencias externas. Los módulos de la colección estándar se han sometido a pruebas adicionales de auditoría y compatibilidad;
  • Además del tiempo de ejecución, la plataforma Deno también actúa como administrador de paquetes y le permite acceder a los módulos mediante URL dentro del código. Por ejemplo, para cargar un módulo, puede especificar en el código “importar * como registro desde “https://deno.land/std/log/mod.ts”. Los archivos descargados desde servidores externos a través de URL se almacenan en caché. El enlace a las versiones del módulo se determina especificando los números de versión dentro de la URL, por ejemplo, “https://unpkg.com/[email protected]/dist/liltest.js";
  • La estructura incluye un sistema integrado de inspección de dependencias (el comando “deno info”) y una utilidad para formatear código (deno fmt);
  • Todos los scripts de la aplicación se pueden combinar en un archivo JavaScript.

Diferencias con Node.js:

  • Deno no usa el administrador de paquetes npm
    y no está vinculado a repositorios, los módulos se acceden a través de una URL o mediante una ruta de archivo, y los módulos mismos se pueden colocar en cualquier sitio web;
  • Deno no usa "package.json" para definir módulos;
  • Diferencia de API, todas las acciones asincrónicas en Deno devuelven una promesa;
  • Deno requiere una definición explícita de todos los permisos necesarios para archivos, red y variables de entorno;
  • Todos los errores que no se proporcionan con los controladores provocan la finalización de la aplicación;
  • Deno utiliza el sistema de módulos ECMAScript y no admite require();
  • El servidor HTTP integrado de Deno está escrito en TypeScript y se ejecuta sobre sockets TCP nativos, mientras que el servidor HTTP Node.js está escrito en C y proporciona enlaces para JavaScript. Los desarrolladores de Deno se han centrado en optimizar toda la capa de socket TCP y proporcionar una interfaz más general. Deno HTTP Server proporciona un rendimiento más bajo pero garantiza una latencia baja y predecible. Por ejemplo, en la prueba, una aplicación simple basada en el servidor HTTP de Deno pudo procesar 25 mil solicitudes por segundo con una latencia máxima de 1.3 milisegundos. En Node.js, una aplicación similar procesó 34 mil solicitudes por segundo, pero las latencias oscilaron entre 2 y 300 milisegundos.
  • Deno no es compatible con paquetes para Node.js (NPM), pero se está desarrollando por separado capa intermedia para compatibilidad con la biblioteca estándar Node.js, a medida que se desarrolle, más y más aplicaciones escritas para Node.js podrán ejecutarse en Deno.
  • Fuente: opennet.ru

Añadir un comentario