WinterJS vs. Bun: Comparación de los tiempos de ejecución de JavaScript

La velocidad, como sabemos, siempre es una ventaja en un entorno de programación, y se espera que los tiempos de ejecución satisfagan esta necesidad. Un tiempo de ejecución más rápido generalmente se traduce en un código ejecutado más rápido, lo que a su vez impacta directamente en la experiencia de usuario, ya que los usuarios no tienen que esperar más de lo esperado.
Por eso, en este tutorial presentaremos WinterJS, que, en teoría, es el entorno de ejecución de JavaScript más rápido de WinterCG. ¡Y sí, tenemos otro entorno de ejecución de JavaScript! Como hay tantos para elegir, también compararemos WinterJS con Bun, otro entorno de ejecución conocido por su velocidad.
Para seguir este artículo, es necesario tener conocimientos básicos de JavaScript y algo de experiencia con un entorno de ejecución de JavaScript. También sería útil tener cierta familiaridad con el motor de JavaScript.
- Revisando cómo funcionan los entornos de ejecución de JavaScript
- Una breve descripción general de WinterCG
- ¿Qué es WinterJS?
- Las diferencias entre WinterJS y Bun
- Conclusión
- ¿Estás agregando nuevas bibliotecas de JavaScript para crear nuevas funciones o mejorar el rendimiento? ¿Qué pasa si hacen lo contrario?
Revisando cómo funcionan los entornos de ejecución de JavaScript
JavaScript se ejecuta en un motor , por ejemplo, V8 o SpiderMonkey. Este motor gestiona la memoria y realiza el seguimiento de las tareas asincrónicas.
Cómo usar las redes sociales para mejorar tu carrera en diseño de productosSin embargo, aún se necesita la capacidad de interactuar con un sistema de archivos externo y realizar solicitudes. Aquí es donde entran en juego los entornos de ejecución de JavaScript como WinterJS y Bun.
El siguiente diagrama muestra cómo estos diferentes elementos funcionan juntos:
Una breve descripción general de WinterCG
WinterJS es el primer entorno de ejecución que se basa completamente en la especificación WinterCG , cumpliendo todos sus requisitos. Antes de profundizar en WinterJS, si no está familiarizado con WinterCG, es importante conocerlo.
WinterCG, o el Grupo Comunitario de Runtimes Interoperables con la Web, representa un intento de establecer una base de estándares en la comunidad de runtimes. Este grupo comunitario busca consensuar las características y funcionalidades que JavaScript del lado del servidor debería ofrecer.
Gerente principal de producto: responsabilidades y perspectivas profesionalesEl objetivo de WinterCG es que el código JavaScript del lado del servidor, desde las funciones de registro hasta la obtención de datos, funcione a la perfección en todos estos entornos de ejecución, como Node, Deno, Cloudflare Workers, Bun, LRT y WinterJS. En otras palabras, WinterCG busca estandarizar los entornos de ejecución para que el código JavaScript funcione y se vea igual independientemente del entorno que se utilice.
Los esfuerzos de WinterCG se vuelven cada vez más importantes y reconocidos en la comunidad de desarrolladores, por lo que nombrar un entorno de ejecución en honor a WinterCG significa un fuerte compromiso con el apoyo a sus reglas.
Vale la pena señalar que, si bien Bun no está afiliado directamente con WinterCG, está construido sobre cosas que son parte de WinterCG, en particular, el entorno de ejecución de JavaScriptCore del marco WebKit.
¿Qué es WinterJS?
WinterJS se centra en la velocidad y en proporcionar un espacio seguro para los desarrolladores que crean aplicaciones web de alto rendimiento. Es un entorno de ejecución de JavaScript desarrollado en Rust que utiliza el motor SpiderMonkey para ejecutar JavaScript y Tokio para gestionar las solicitudes HTTP .
Una guía para defender la accesibilidad ante las partes interesadas escépticasPuedes compilar WinterJS en WebAssembly (Wasm): es un entorno de ejecución listo para producción y totalmente operativo en Wasmer Edge, un gran logro para una herramienta tan nueva. De hecho, WinterJS cuenta con una cantidad increíble de logros:
- Velocidad sin precedentes, superando el rendimiento de Bun, WorkerD y Node (un punto destacado de su rendimiento)
- Cumple totalmente con las especificaciones de WinterCG
- Compatible con la API de Cloudflare
- Compatibilidad con varios marcos web
Ahora, profundicemos en nuestra comparación entre WinterJS y Bun.
Las diferencias entre WinterJS y Bun
WinterJS y Bun tienen diferentes prioridades principales, o aspectos en los que se centran más. Por ejemplo, WinterJS se centra más en la velocidad, las especificaciones de WinterCG, la compatibilidad con la API de Cloudflare y la compatibilidad con frameworks:
Mientras tanto, Bun también enfatiza la velocidad, pero por lo demás se centra en proporcionar API elegantes y un conjunto de herramientas completo para crear aplicaciones JavaScript:
Formas prácticas de mejorar la experiencia del clienteYendo más allá, exploraremos las diferencias en su compatibilidad con sistemas operativos, compatibilidad con TypeScript, compatibilidad con Wasm, compatibilidad con ecosistemas y marcos, requisitos y métodos de instalación, rendimiento y limitaciones.
Compatibilidad con sistemas operativos
Al momento de escribir este artículo, WinterJS no es compatible con Windows, pero sí con Linux y macOS. Bun sí lo es.
Construir arquitectura
Como ya se mencionó, WinterJS está desarrollado con Rust y funciona con SpiderMonkey. Lo que no mencionamos es que también funciona con Spiderfire e Hyper para ofrecerte las ventajas únicas de todas estas herramientas en un único y práctico entorno de ejecución.
Mientras tanto, es importante destacar que Bun no es solo un entorno de ejecución de JavaScript, sino también un gestor de paquetes, empaquetador y ejecutor de pruebas. Está desarrollado con el lenguaje Zig y utiliza JavaScriptCore de WebKit como motor de JavaScript.
Compatibilidad con TypeScript
Al momento de escribir este artículo, WinterJS no es compatible con TypeScript. Sin embargo, Bun sí ofrece un sólido soporte para TypeScript de fábrica.
Bun traduce automáticamente archivos TypeScript a JavaScript a medida que los usas. A diferencia de otras herramientas, no busca errores tipográficos, sino que simplemente convierte el código TypeScript a JavaScript eliminando las anotaciones de tipo.
Compatibilidad con WebAssembly (Wasm)
WinterJS se puede compilar en Wasm con WASIX, lo que le permite ejecutarse en entornos WebAssembly con un rendimiento aceptable. Es importante tener en cuenta que el proceso de compilación es complejo y deberá abrir una incidencia para obtener ayuda del equipo de WinterJS.
Bun, a su vez, ofrece soporte experimental para Wasm. Para ejecutar un .wasm
binario con Bun, solo necesita usar el comando bun
seguido del nombre de su .wasm
archivo. Si el archivo no termina en .wasm
, puede usar el bun run
comando seguido del nombre del archivo.
Soporte de ecosistema y marco
WinterJS es aún muy reciente y su adopción es limitada, pero es compatible con casi todos los principales frameworks frontend. Esto es posible gracias a su compatibilidad con la API de Cloudflare Workers, que le permite servir sitios web estáticos creados por estos frameworks, además de habilitar SSR.
Estos son los marcos que WinterJS admite en el momento de escribir este artículo: Next.js, Next.js con RSC (aunque el fetch
caché del lado del servidor aún no está implementado), Hono, Astro.build, Remix.run, Svelte, Gatsby y Nuxt.
En comparación, Bun sigue creciendo, pero su adopción es mucho mayor que la de WinterJS y cuenta con una comunidad sólida. Aun así, presenta menor compatibilidad con la mayoría de los frameworks frontend.
Bun es compatible con React, Nuxt y Svelte, pero no con Next.js ni Remix de fábrica. Puedes usar Bun para configurar un proyecto de Next.js e instalar dependencias, pero el enrutador de aplicaciones de Next.js depende de las API de Node.js que Bun aún no ha incorporado, por lo que aún necesitarás Node.js para ejecutar el servidor de desarrollo.
Actuación
WinterJS demuestra contundentemente que es el entorno de ejecución más rápido:
- Construido con el lenguaje de programación compilado Rust
- Puede utilizar el motor de SpiderMonkey
- Puede compilar código JavaScript en Wasm
Estos factores le otorgan a WinterJS el derecho a afirmar que es el entorno de ejecución más rápido, ya que cada uno es reconocido por su velocidad, especialmente Rust. Esto también le otorga a WinterJS una ventaja sobre otros entornos de ejecución escritos en JavaScript.
Bun también afirma ser muy rápido. Utiliza el motor JavaScriptCore, que impulsa Safari y es conocido por sus tiempos de inicio más rápidos y un rendimiento potencialmente mejor en comparación con el motor V8 de Node, especialmente en ciertos escenarios.
La velocidad de Bun también se puede atribuir a su desarrollo con Zig, un lenguaje de programación de sistemas de bajo nivel similar a C++. Zig ofrece una buena gestión y control de memoria, lo que permite una generación de código eficiente y una ejecución potencialmente más rápida en comparación con lenguajes de alto nivel.
Analicemos una prueba de rendimiento sencilla. Tenga en cuenta que esta prueba no constituye un punto de referencia fiable para el rendimiento real esperado de estos entornos de ejecución en una aplicación real, sino que proporciona una instantánea del rendimiento para un escenario de prueba específico.
En la prueba, definiremos una solicitud HTTP simple en WinterJS y Bun, y luego veremos qué tan bien funcionan de forma independiente.
Cree una carpeta llamada Performance
. En esta carpeta, cree dos carpetas más llamadas Bun
y Winter
, respectivamente. Luego, en cada una de estas carpetas, cree un index.js
archivo donde se crearán solicitudes HTTP simples. A continuación, se muestra el árbol de archivos:
Actuación/│├── Bollo/│ ├── index.js│└── Invierno/ ├── index.js
En el index.js
archivo de la Winter
carpeta, pegue el siguiente código:
addEventListener('obtener', (solicitud) = { req.respondWith(new Response('¡Logrocket es el mejor!')); });
Navegue al directorio correcto y ejecute este código con el siguiente comando:
wasmer ejecuta wasmer/winterjs --net --mapdir=./:. ./index.js
Aquí están los resultados de rendimiento de WinterJS con Wasmer:
En el index.js
archivo de la Bun
carpeta, pegue el código a continuación;
constante servidor = Bun.serve({ puerto: 3000, buscar(solicitud) { devolver nueva Respuesta('¡Logrocket es el mejor!') }, }) console.log(`Escuchando en localhost:${server.port}`)
Navegue al directorio correcto y ejecute este código con el siguiente comando:
Ok, ejecuta index.js.
A continuación podemos ver la actuación de Bun:
En este ejemplo específico, se puede observar que Bun funciona mejor que WinterJS en mi ordenador. Se dice que WinterJS funciona mucho mejor de forma nativa que con Wasmer, lo que explica su bajo rendimiento en esta prueba. Un resultado nativo podría ser similar a esto:
El resultado de muestra anterior proviene de WinterJS GitHub y muestra cómo funciona mejor de forma nativa con esta prueba muy simple.
Limitaciones
Según el equipo de WinterJS, a pesar de cumplir plenamente con la especificación WinterCG, el entorno de ejecución aún está en desarrollo. Entre otras limitaciones, WinterJS actualmente tiene una compatibilidad limitada con la API.
En comparación, la compatibilidad limitada de Bun con algunos marcos y su etapa experimental para Wasm son sus únicas limitaciones conocidas.
Instalación
Como último punto de comparación, y para ayudarlo a comenzar con cualquier entorno de ejecución que finalmente elija, analicemos los pasos iniciales para WinterJS y Bun, respectivamente.
Debes tener Rust y SpiderMonkey instalados antes de intentar compilar con WinterJS. El proceso de instalación de WinterJS es un poco complejo. Por ahora, es probable que experimentes errores al instalarlo en Linux.
Por ejemplo, es posible que veas un error como el que se muestra a continuación justo después de intentar instalar todo y luego compilar con WinterJS:
Si encuentra algún error al usar WinterJS, debe abrir un problema para que su equipo de mantenimiento pueda intentar ayudarlo a solucionarlo.
También puedes ejecutar WinterJS en Wasmer. Primero, instala la CLI de Wasmer . Luego, crea un directorio en tu computadora, ábrelo en tu editor de código y crea un archivo. Yo le puse el nombre a mi archivo simple.js
, pero puedes elegir uno que se ajuste a tus necesidades. Navega hasta tu archivo y pega el código a continuación:
addEventListener('obtener', (solicitud) = { req.respondWith(new Respuesta('hola));});
A continuación, abra su terminal y ejecute el siguiente comando:
wasmer ejecutar wasmer/winterjs --net --mapdir=./:. ./simple.js
Finalmente, dirígete al navegador y abre http://localhost:8080/ . Deberías ver un mensaje de “hola”.
Instalar Bun es facilísimo comparado con WinterJS. Bun ofrece varias opciones de instalación, como cURL , npm, Docker, etc. Para instalarlo en Linux (usando cURL, suponiendo que lo tenga configurado ), ejecute lo siguiente:
curl -fsSL https://bun.sh/install | bash # para macOS, Linux y WSL# para instalar una versión específicacurl -fsSL https://bun.sh/install | bash -s "bun-v1.0.0"
Puede consultar la documentación de instalación de Bun para obtener más opciones de instalación.
Conclusión
WinterJS es nuevo, así que necesitaremos ver más proyectos pesados desarrollados con él para tener una idea de su rendimiento real. Sin embargo, al ejecutar un servidor simple de “Hola mundo”, podemos observar que es increíblemente rápido para tareas ligeras. Esto convierte a WinterJS en un entorno de ejecución muy prometedor.
En el futuro, cuando tengamos una comprensión más clara de cómo funciona WinterJS en aplicaciones prácticas en comparación con entornos de ejecución como Bun, su elección probablemente dependerá de sus deseos en un proyecto.
Si la velocidad y la compatibilidad con Wasm y los principales frameworks frontend son prioritarias, probablemente te convenga usar WinterJS. De lo contrario, quizás prefieras confiar en Bun para que haga un excelente trabajo en otras áreas de rendimiento. Gracias por leer hasta aquí.
¿Estás agregando nuevas bibliotecas de JavaScript para crear nuevas funciones o mejorar el rendimiento? ¿Qué pasa si hacen lo contrario?
Sin duda, los frontends son cada vez más complejos. A medida que añadas nuevas bibliotecas de JavaScript y otras dependencias a tu aplicación, necesitarás mayor visibilidad para garantizar que tus usuarios no se encuentren con problemas desconocidos.
Construya con confianza: comience a monitorear de forma gratuita .
Si quieres conocer otros artículos parecidos a WinterJS vs. Bun: Comparación de los tiempos de ejecución de JavaScript puedes visitar la categoría Guias.
Entradas Relacionadas