Construyendo un Servidor Web Hiper Rápido con Deno

Rate this content
Bookmark

Deno 1.9 introdujo una nueva API de servidor web que aprovecha Hyper, una implementación rápida y correcta de HTTP para Rust. El uso de esta API en lugar de la implementación std/http aumenta el rendimiento y proporciona soporte para HTTP2. En este masterclass, aprende cómo crear un servidor web utilizando Hyper en el fondo y mejorar el rendimiento de tus aplicaciones web.

This workshop has been presented at JSNation Live 2021, check out the latest edition of this JavaScript Conference.

FAQ

Deno es un entorno de ejecución seguro para JavaScript y TypeScript que utiliza V8 y está construido en Rust. Ofrece varias mejoras sobre Node.js, como seguridad de forma predeterminada (no tiene acceso a la red o al sistema de archivos sin permisos explícitos), soporte nativo para TypeScript, y una arquitectura basada en módulos que utiliza URLs para cargar módulos de manera similar a los navegadores.

Sí, Deno soporta tanto JavaScript como TypeScript. Puedes escribir y ejecutar programas utilizando JavaScript, pero se recomienda usar TypeScript por los beneficios adicionales de tipado y seguridad que ofrece.

Oak es un middleware framework para Deno muy similar a Express para Node.js, diseñado para facilitar la creación de aplicaciones web y APIs. Provee una capa de abstracción que maneja la solicitud y respuesta HTTP, mejorando la experiencia de desarrollo y permitiendo un manejo más eficiente de las conexiones y rutas.

Deno permite usar varios lenguajes de plantillas, como EJS, Pug, y Mustache, a través de módulos de terceros. Estos módulos se pueden importar directamente usando URLs, similar a cómo se manejan otros módulos en Deno.

Sí, Deno puede ser usado en producción dependiendo de los requisitos específicos del proyecto. Ofrece características robustas y mejoras de seguridad sobre Node.js. Sin embargo, la decisión de usarlo debe basarse en una evaluación cuidadosa de las necesidades del proyecto y la compatibilidad de las bibliotecas y frameworks disponibles.

Deno ofrece varios beneficios como seguridad mejorada, soporte nativo para TypeScript, y un sistema de módulos más moderno que no requiere un gestor de paquetes. Estas características facilitan escribir aplicaciones más seguras y mantenibles, y pueden mejorar la productividad del desarrollador.

Matt Landers
Matt Landers
Will Johnston
Will Johnston
156 min
16 Jun, 2021

Comments

Sign in or register to post your comment.
Video Summary and Transcription
El masterclass presenta Beano y Hyper, un tiempo de ejecución de JavaScript y una biblioteca de Rust conocida por su implementación rápida de HTTP. Se discuten los beneficios de usar Rust e Hyper en lugar de la implementación estándar de TypeScript de HTTP. Las pruebas de carga muestran que Hyper es aproximadamente un 35% más rápido. Se explica el proceso de construcción de un marco web llamado Hyperbole, junto con la implementación de la lógica de manejo de solicitudes y middleware. Se explora el uso de Deno para bibliotecas y producción, y se enfatiza la importancia de las pruebas de carga y la optimización.

1. Introducción a Beano y Hyper

Short description:

Hola. Soy Matt Landers. Vamos a construir un servidor web ultrarrápido con Beano. Beano es un tiempo de ejecución de JavaScript que admite TypeScript de forma nativa. Hyper es una biblioteca de Rust conocida por su implementación correcta y rápida de HTTP. Emocionado por la integración de Beano 1.9.

♪ Hola. Soy Matt Landers. Soy el jefe de DevRel en WP Engine, y estoy acompañado por... con Will Johnston. Ambos estamos haciendo esta sesión juntos. Vamos a construir algo con Beano. Así que vamos a construir un servidor web ultrarrápido con Beano.

¿Qué estabas diciendo, Will? Dije, hola, chicos. Hola. Will, buenos días. Es temprano para mí. Es temprano para mí. Tal vez no tan temprano para Matt. Y no sé cómo será para el resto de todos. Es temprano para mí solo porque estoy de vacaciones, y... conduje 14 horas durante la noche. He dormido un poco desde entonces, pero tal vez un poco delirante, así que tal vez no todo salga tan bien como debería, pero estoy emocionado de hacer esto todavía.

Encontré un lugar con buena conexión a internet y debería estar... debería estar listo. Estoy realmente emocionado por Beano. Espero que todos aquí hayan oído hablar de Beano, pero solo daré una breve introducción. Beano es un tiempo de ejecución de JavaScript que admite TypeScript de forma nativa, lo cual es realmente increíble para mí porque me encanta TypeScript. Así que puedes crear un archivo TS, ejecutarlo con Beano y listo. No necesitas una configuración de TS ni nada por el estilo. Simplemente funciona. Beano está construido en Rust, lo cual es algo que vamos a aprovechar hoy. Así que cuando decimos construir un servidor web ultrarrápido con Beano, Hyper es una biblioteca de Rust que es una implementación de HTTP. Y se sabe que es muy correcta en su implementación y muy rápida.

Sí, segura en memoria. Ya he usado Rust e Hyper antes. Así que cuando esta integración llegó en Beano 1.9, estaba súper emocionado al respecto.

2. Beneficios de Rust y Hyper

Short description:

Will discute los beneficios de usar Rust y las mejoras de rendimiento de Hyper en comparación con la implementación estándar de TypeScript de HTTP. Planeamos construir una aplicación Hello World y un enrutador y servidor basados en Express. También mencionamos el uso de OAK, un marco web, y ofrecemos soporte para preguntas y proporcionamos instrucciones de configuración.

¿Qué estabas diciendo, Will? Es seguro en memoria. Es seguro en memoria y Rust tiende a ser correcto, como te obliga a hacer las cosas correctamente. Eso no significa que no puedas cometer errores, obviamente, como tu lógica puede estar equivocada, pero te obliga a manejar las condiciones de error, si tienes una enumeración, debes hacer coincidir todas ellas y manejar cada caso. Así que hay muchas cosas en Rust que te obligan a hacer las cosas bien.

Bueno, y lo bueno de esto es que antes de Hyper, tenías una implementación estándar de TypeScript de HTTP, que funciona bien, pero es un poco más lento. Rust es un lenguaje de nivel inferior que JavaScript, por lo que Hyper tiene la capacidad de ser un poco mejor en el rendimiento. Correcto, y tenemos un rendimiento mucho mejor para algunas cosas. Sí, de hecho, estoy realmente impresionado con lo rápido que ha sido la biblioteca HTTP estándar, considerando que está completamente escrita en TypeScript. Así que vamos a escribir una pequeña aplicación Hello World con eso solo para ver cómo se ve eso, y lo usaremos para hacer algunas pruebas de carga para que podamos ver la diferencia cuando usemos Hyper.

Y luego, una vez que pasemos por una aplicación Hello World para Hyper, construiremos un enrutador y un servidor a su alrededor. Vamos a modelar esto según Express. Mi suposición es que la mayoría de las personas aquí han usado Node y probablemente tienen algo de experiencia con Express, así que vamos a hacer eso. Quiero decir, típicamente, si fuera a construir un nuevo marco desde cero con Deno, probablemente no modelaría Express. Haría algo más idiomático para Deno. Deno utiliza Web Standards en todos los aspectos, por lo que la mayoría de las cosas que están en Deno también están disponibles en el navegador, lo cual es genial. Así que usas Web Standards la mayor parte del tiempo. Hay cosas que he aprendido gracias a Deno que están en Web Standards y están disponibles en el navegador que no tenía idea de que estaban allí, lo cual ha sido genial. Cosas como objetos de solicitud y respuesta y cosas de nivel inferior que no pensé que estaban disponibles en el navegador, lo están, lo cual es genial.

Después de eso, crearemos un pequeño marco que haga enrutamiento y permita agregar middleware y luego, si tenemos tiempo al final, usaremos OAK. OAK es más un enfoque de servidor web idiomático escrito por alguien del equipo principal de Deno. Está disponible para usar, pero es un marco web. Así que cuando terminemos con esto, tendrás un pequeño marco web que has escrito tú mismo, lo cual será realmente genial para pasar por ese proceso y ver todas las cosas en las que tienes que pensar cuando estás construyendo un marco web. Pero no lo recomendaría para producción. OAK está bastante bien respaldado por la comunidad y te recomendaría que lo pruebes si vas a construir tu propio servidor, pero esto será genial para ver algunos de los aspectos internos de cómo funciona un marco web.

Y justo antes, o mientras Matt comienza aquí, si tienes alguna pregunta mientras avanzamos, puedes publicarlas en el chat o hay un canal de Discord para esta masterclass y haremos todo lo posible para responder mientras avanzamos. Bien, y trataré, si vamos demasiado rápido o algo así, solo avísanos o si necesitas una explicación o más información sobre lo que estamos haciendo, definitivamente avísanos. Así que estoy en una configuración extraña. Así que si me ves mover la mano, no sé si puedes verme siquiera, pero si me ves mover la mano. Tengo mi iPad aquí. Esa es mi segunda pantalla en este momento. Así que solo tengo algunas notas para seguir. Muy bien, aquí vamos. Así que ahora solo tengo una carpeta. No hay nada en ella. Así que necesitas tener Deno instalado. Necesitas tener al menos Deno 1.9 o superior. Hyper se agregó a la API de Deno en la versión 1.9. Todavía está en un estado inestable. Así que usaremos la bandera de inestable para esto. Tengo este otro archivo aquí. Oye, este es un probador de carga. Supongo que puedo abrirlo. Sí, lo voy a vincular en Discord y también lo vincularé aquí en el chat. Sí, esto es genial. Es un probador de carga. Es solo una utilidad de línea de comandos que puedes usar para generar carga en una URL. Y eso nos permitirá analizar el rendimiento de cada una de nuestras soluciones que creemos. Así que si quieres hacer eso con nosotros, definitivamente descarga HEI. Los ejecutables están aquí mismo. Solo los descargas y los ejecutas. Es posible que debas hacer chmod, luego mach1, chmod 777, luego el nombre del archivo. Muy bien, vamos a construir un pequeño servidor con Deno. Oh, otra cosa que necesitarás. Estoy en VS Code. Hay una extensión para Deno, si buscas Deno en tus extensiones. Es la que es de Denoland. Denoland es la organización en GitHub para Deno, y ellos mantienen esta extensión. Solía ser de terceros, y luego la trajeron, lo cual es genial. Así que obtén esa extensión. Eso te permitirá hacer cosas como esperas en el nivel superior, obtener los tipos para Deno, TypeScript y todo eso. Muy bien, lo primero que voy a hacer es configurar esto para Deno. Voy a hacer Comando-Mayús-P, y si escribes Deno, obtendrás inicializar la configuración de tu espacio de trabajo, y solo presiona Enter en eso, y creará un archivo de configuración de VS code para que VS code sepa que este es un proyecto de Deno, y la extensión ahora estará en uso. Muy bien, voy a crear una carpeta, y la llamaré STD, y vamos a crear la implementación de hello world aquí para la biblioteca estándar, y simplemente puedes crear un archivo TS, y mi iPad sigue quedando en blanco, así que no recuerdo el nombre exacto del módulo en el que lo vamos a poner. Muy bien. No necesitas clonar Hey. Hey, si quieres, acabo de vincularlo. Lo vamos a usar, pero es solo un probador de carga. No vamos a escribir ningún código ni nada por el estilo. Correcto, sí. Solo lo estamos usando para que cuando escribamos nuestro servidor, lo iniciemos, podemos apuntar Hey a eso y hacer que genere carga y ver cuántas solicitudes por segundo podemos obtener. Muy bien, lo primero que vamos a hacer es importar serve, y esta es la implementación de Hello World de la biblioteca estándar, solo para que te hagas una idea de cómo se ve. Deno utiliza módulos ESM, por lo que no tenemos que usar NPM install ni nada por el estilo. Literalmente podemos apuntar esto en Internet, y traerá estos archivos, lo cual es súper genial. Esa es una de las grandes innovaciones de Deno también es alejarse de NPM y la gestión de dependencias y permitirte hacerlo de una manera más amigable para la web. Sí, Brian, de hecho tenemos un enlace de GitHub para la masterclass que tiene la versión final de lo que estamos creando hoy, así que lo vincularé más tarde para que las personas puedan seguirlo y no estar buscando el código final mientras intentamos codificarlo. Estamos comenzando con una carpeta vacía, como puedes ver, Matt solo tiene su std / hello-world.ts y nada más, así que eso es con lo que empezamos hoy. Sí, esto es súper genial. Deno es genial. Si no lo has usado antes, sí, no tienes que hacer nada para la configuración. No necesito crear un NPM. No tengo que hacer ningún package.json ni nada por el estilo. Simplemente puedo crear un archivo TypeScript y comenzar a codificar y luego simplemente lo vamos a ejecutar. No hay más que hacer. Los paquetes pueden estar en caché localmente, por lo que lo que puedes hacer, si estás ejecutando el complemento de VS Code, puedes ir arriba y hacer clic derecho en él, creo, y potencialmente cachear el complemento. Y de esa manera estará disponible para ti. Sí, una cosa que me ha pasado ahora mismo es que no encuentra estas cosas. Así que a veces, después de inicializar la extensión, necesito reiniciar VS Code, así que voy a hacer eso rápidamente. Así que es posible que también necesites hacer eso. Si ves ondas rojas debajo de la importación, entonces tendrás que hacer eso. Así que ahora desaparecieron, así que estoy listo para continuar.

QnA

Watch more workshops on topic

Masterclass de Node.js
Node Congress 2023Node Congress 2023
109 min
Masterclass de Node.js
Top Content
Workshop
Matteo Collina
Matteo Collina
¿Alguna vez has tenido dificultades para diseñar y estructurar tus aplicaciones Node.js? Construir aplicaciones que estén bien organizadas, sean probables y extensibles no siempre es fácil. A menudo puede resultar ser mucho más complicado de lo que esperas. En este evento en vivo, Matteo te mostrará cómo construye aplicaciones Node.js desde cero. Aprenderás cómo aborda el diseño de aplicaciones y las filosofías que aplica para crear aplicaciones modulares, mantenibles y efectivas.

Nivel: intermedio
Construye y Despliega un Backend con Fastify y Platformatic
JSNation 2023JSNation 2023
104 min
Construye y Despliega un Backend con Fastify y Platformatic
WorkshopFree
Matteo Collina
Matteo Collina
Platformatic te permite desarrollar rápidamente APIs GraphQL y REST con un esfuerzo mínimo. La mejor parte es que también te permite aprovechar todo el potencial de Node.js y Fastify cuando lo necesites. Puedes personalizar completamente una aplicación de Platformatic escribiendo tus propias características y complementos adicionales. En el masterclass, cubriremos tanto nuestros módulos de código abierto como nuestra oferta en la nube:- Platformatic OSS (open-source software) — Herramientas y bibliotecas para construir rápidamente aplicaciones robustas con Node.js (https://oss.platformatic.dev/).- Platformatic Cloud (actualmente en beta) — Nuestra plataforma de alojamiento que incluye características como aplicaciones de vista previa, métricas integradas e integración con tu flujo de Git (https://platformatic.dev/).
En este masterclass aprenderás cómo desarrollar APIs con Fastify y desplegarlas en la nube de Platformatic.
0 a Auth en una Hora Usando NodeJS SDK
Node Congress 2023Node Congress 2023
63 min
0 a Auth en una Hora Usando NodeJS SDK
WorkshopFree
Asaf Shen
Asaf Shen
La autenticación sin contraseña puede parecer compleja, pero es fácil de agregar a cualquier aplicación utilizando la herramienta adecuada.
Mejoraremos una aplicación JS de pila completa (backend de Node.JS + frontend de React) para autenticar usuarios con OAuth (inicio de sesión social) y contraseñas de un solo uso (correo electrónico), incluyendo:- Autenticación de usuario - Administrar interacciones de usuario, devolver JWT de sesión / actualización- Gestión y validación de sesiones - Almacenar la sesión para solicitudes de cliente posteriores, validar / actualizar sesiones
Al final del masterclass, también tocaremos otro enfoque para la autenticación de código utilizando Flujos Descope en el frontend (flujos de arrastrar y soltar), manteniendo solo la validación de sesión en el backend. Con esto, también mostraremos lo fácil que es habilitar la biometría y otros métodos de autenticación sin contraseña.
Tabla de contenidos- Una breve introducción a los conceptos básicos de autenticación- Codificación- Por qué importa la autenticación sin contraseña
Requisitos previos- IDE de tu elección- Node 18 o superior
GraphQL: De Cero a Héroe en 3 horas
React Summit 2022React Summit 2022
164 min
GraphQL: De Cero a Héroe en 3 horas
Workshop
Pawel Sawicki
Pawel Sawicki
Cómo construir una aplicación GraphQL fullstack (Postgres + NestJs + React) en el menor tiempo posible.
Todos los comienzos son difíciles. Incluso más difícil que elegir la tecnología es desarrollar una arquitectura adecuada. Especialmente cuando se trata de GraphQL.
En este masterclass, obtendrás una variedad de mejores prácticas que normalmente tendrías que trabajar en varios proyectos, todo en solo tres horas.
Siempre has querido participar en un hackathon para poner algo en funcionamiento en el menor tiempo posible, entonces participa activamente en este masterclass y únete a los procesos de pensamiento del instructor.
Dominando Node.js Test Runner
TestJS Summit 2023TestJS Summit 2023
78 min
Dominando Node.js Test Runner
Workshop
Marco Ippolito
Marco Ippolito
Node.js test runner es moderno, rápido y no requiere bibliotecas adicionales, pero entenderlo y usarlo bien puede ser complicado. Aprenderás a utilizar Node.js test runner a su máximo potencial. Te mostraremos cómo se compara con otras herramientas, cómo configurarlo y cómo ejecutar tus pruebas de manera efectiva. Durante la masterclass, haremos ejercicios para ayudarte a sentirte cómodo con el filtrado, el uso de afirmaciones nativas, la ejecución de pruebas en paralelo, el uso de CLI y más. También hablaremos sobre trabajar con TypeScript, hacer informes personalizados y la cobertura de código.
Seguimiento de errores y ralentizaciones en Node + JavaScript utilizando Sentry
Node Congress 2022Node Congress 2022
53 min
Seguimiento de errores y ralentizaciones en Node + JavaScript utilizando Sentry
WorkshopFree
Neil Manvar
Neil Manvar
Repasaremos la configuración de Sentry paso a paso para obtener visibilidad en nuestro frontend y backend. Una vez integrado, rastrearemos y solucionaremos errores y transacciones que se muestren en Sentry desde nuestros servicios para comprender por qué/dónde/cómo ocurrieron errores y ralentizaciones en nuestro código de aplicación.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Es una jungla ahí fuera: ¿Qué está pasando realmente dentro de tu carpeta Node_Modules?
Node Congress 2022Node Congress 2022
26 min
Es una jungla ahí fuera: ¿Qué está pasando realmente dentro de tu carpeta Node_Modules?
Top Content
The talk discusses the importance of supply chain security in the open source ecosystem, highlighting the risks of relying on open source code without proper code review. It explores the trend of supply chain attacks and the need for a new approach to detect and block malicious dependencies. The talk also introduces Socket, a tool that assesses the security of packages and provides automation and analysis to protect against malware and supply chain attacks. It emphasizes the need to prioritize security in software development and offers insights into potential solutions such as realms and Deno's command line flags.
Hacia una Biblioteca Estándar para Runtimes de JavaScript
Node Congress 2022Node Congress 2022
34 min
Hacia una Biblioteca Estándar para Runtimes de JavaScript
Top Content
There is a need for a standard library of APIs for JavaScript runtimes, as there are currently multiple ways to perform fundamental tasks like base64 encoding. JavaScript runtimes have historically lacked a standard library, causing friction and difficulty for developers. The idea of a small core has both benefits and drawbacks, with some runtimes abusing it to limit innovation. There is a misalignment between Node and web browsers in terms of functionality and API standards. The proposal is to involve browser developers in conversations about API standardization and to create a common standard library for JavaScript runtimes.
ESM Loaders: Mejorando la carga de módulos en Node.js
JSNation 2023JSNation 2023
22 min
ESM Loaders: Mejorando la carga de módulos en Node.js
ESM Loaders enhance module loading in Node.js by resolving URLs and reading files from the disk. Module loaders can override modules and change how they are found. Enhancing the loading phase involves loading directly from HTTP and loading TypeScript code without building it. The loader in the module URL handles URL resolution and uses fetch to fetch the source code. Loaders can be chained together to load from different sources, transform source code, and resolve URLs differently. The future of module loading enhancements is promising and simple to use.
Diagnostics de Node.js listos para usar
Node Congress 2022Node Congress 2022
34 min
Diagnostics de Node.js listos para usar
This talk covers various techniques for getting diagnostics information out of Node.js, including debugging with environment variables, handling warnings and deprecations, tracing uncaught exceptions and process exit, using the v8 inspector and dev tools, and generating diagnostic reports. The speaker also mentions areas for improvement in Node.js diagnostics and provides resources for learning and contributing. Additionally, the responsibilities of the Technical Steering Committee in the TS community are discussed.
Compatibilidad con Node.js en Deno
Node Congress 2022Node Congress 2022
34 min
Compatibilidad con Node.js en Deno
Deno aims to provide Node.js compatibility to make migration smoother and easier. While Deno can run apps and libraries offered for Node.js, not all are supported yet. There are trade-offs to consider, such as incompatible APIs and a less ideal developer experience. Deno is working on improving compatibility and the transition process. Efforts include porting Node.js modules, exploring a superset approach, and transparent package installation from npm.
Javascript Debería Venir Con Baterías
React Day Berlin 2023React Day Berlin 2023
30 min
Javascript Debería Venir Con Baterías
JavaScript Should Come With Batteries: Deno is a next-generation JavaScript runtime that addresses the lack of built-in tooling in JavaScript. It provides a secure and simple way to develop applications with built-in testing, linting, formatting, and a language server for VS Code. Deno is compatible with Node.js and NPM, supports web standard APIs, and allows code portability between frontend and server. It also offers features like a built-in database, a key-value store, and transparent monetization with Deno Deploy.