Explorando Bun.sh: Un Potente Entorno de Ejecución JavaScript

Fernando Bernal
6 min readNov 11, 2023

--

Photo by CHUTTERSNAP on Unsplash

Introducción

Bun.sh es un nuevo y veloz entorno de ejecución JavaScript que ha captado la atención de la comunidad de desarrolladores. En este artículo, exploraremos algunos datos interesantes sobre Bun, evaluaremos cómo se compara con otros entornos de ejecución JavaScript y veremos cómo utilizarlo para iniciar un proyecto de React. Por último, realizaremos pruebas de velocidad para comprobar si Bun es tan rápido como afirma su sitio web.

¿Qué es Bun?

En términos simples, un entorno de ejecución JavaScript permite que un programa interactúe con el mundo exterior proporcionando acceso a librerías y objetos incorporados. Bun es un entorno de ejecución JavaScript todo en uno, relativamente nuevo y rápido. Incluye un empaquetador nativo, un transpilador, un gestor de tareas y un cliente npm.

Características

  • Incluye APIs web como Fetch, WebSocket y ReadableStream.
  • Transpila cada archivo, permitiendo trabajar con TypeScript y JSX.
  • Implementa el algoritmo de resolución de módulos de Node.js, lo que significa que se pueden utilizar paquetes npm.
  • Incluye un cliente SQLite3 extremadamente rápido.
  • Implementa la mayoría de la API de Node.js, lo que hace que muchos módulos nativos de Node funcionen sin problemas.

¿Qué podemos hacer con Bun?

Transpilación

El transpilador de Bun es una característica fantástica que convierte TypeScript, JSX, e incluso JavaScript estándar. Después de todo, ¿por qué necesitarías transpilar JavaScript común?

Esta es una excelente pregunta. Aquí es donde entra en juego una de las características de mejora de rendimiento de Bun. Bun optimiza automáticamente el JavaScript antes de ejecutarlo.

Aún se encuentra en desarrollo la característica de transpilación, los desarrolladores tienen la intención de incluir un formato binario optimizado para JavaScript en el futuro. Estas optimizaciones podrían tener implicaciones significativas.

Ejecución de Tareas

El gestor de tareas de Bun es similar al de Node.js, pero notablemente más rápido. Puedes aprovechar la velocidad del gestor de tareas de Bun en un proyecto de Node. Un gestor de tareas es una herramienta esencial; tanto Node/npm como Deno incluyen uno por defecto. Además, el gestor de tareas de Bun puede ejecutar casi cualquier script sin necesidad de un subcomando de ejecución, mientras que npm solo puede hacerlo para unos pocos nombres de scripts.

Gestión de Paquetes

El gestor de paquetes de Bun supera en términos de rendimiento. De hecho, Bun debería ser más rápido que npm o Yarn, y aquí está el motivo:

  • Enlaces simbólicos: Debido a que Bun utiliza enlaces simbólicos, los paquetes para cada proyecto están vinculados a una ubicación centralizada. Esto significa que los módulos utilizados en proyectos posteriores no tienen que descargarse nuevamente.
  • Archivo de bloqueo binario: Bun utiliza un archivo de bloqueo binario; los archivos binarios suelen serializarse y deserializarse más rápidamente, lo que reduce el tiempo total requerido por el gestor de paquetes.
  • Zig: El gestor de paquetes de Bun está escrito en Zig. Este es un lenguaje muy rápido; mucho más rápido que JavaScript, que es utilizado por la mayoría de los otros gestores de paquetes de JavaScript.

Comparación entre Bun, Node.js y Deno

Node.js y Deno son dos de los entornos de ejecución de JavaScript en el lado del servidor más populares y ampliamente utilizados. Veamos cómo se comparan con Bun.

Según las pruebas realizadas por los creadores de Bun, este puede superar tanto a Node.js como a Deno en operaciones intensivas de entrada/salida como servidores HTTP y SQL. Bun es más rápido al iniciarse y ejecutarse que Node.js y Deno. También, según sus creadores, afirman que es significativamente más rápido que ambos entornos de ejecución de JavaScript debido a su uso de JavaScriptCore en lugar de JavaScript V8, su utilización de Zig para escribir la API, y su extenso ajuste y benchmarking.

Estas afirmaciones pueden parecer extravagantes, después de todo, todo es JavaScript y JavaScript V8 es bastante eficiente. Sin embargo, recuerda que mencioné la velocidad de Bun en tareas intensivas de entrada/salida. Un porcentaje significativo del tiempo de ejecución se gasta en la API del entorno de ejecución en lugar del motor JavaScript en sí. Bun es mucho más rápido en estos casos porque tiene una implementación de entrada/salida mucho más rápida que Node.js y Deno.

Características adicionales

Bun no es solo un entorno de ejecución JavaScript; también viene con una serie de características adicionales que lo convierten en una herramienta versátil y potente para los desarrolladores web. Estas características incluyen un empaquetador, un transpilador de TypeScript y un corredor de pruebas, similares a los que se encuentran en Deno.

Bun también incluye una herramienta CSS-in-JS, un constructor de plantillas y un cargador de variables de entorno. Bun no tiene las mismas limitaciones de peso de código que las librerías web, lo que le permite ofrecer tanto optimización de rendimiento como una impresionante variedad de características.

Compatibilidad

Bun fue diseñado para ser compatible con Node.js. Incluye soporte completo para CommonJS, Node-API y algunos módulos de Node.js. Esta característica es extremadamente útil porque te permite acceder al vasto ecosistema de Node.js.

Creando una Aplicación de React con Bun

Ahora que tenemos una mejor comprensión de las muchas características de Bun, veamos cómo podemos crear una aplicación de React en el entorno de ejecución JavaScript de Bun.

Instalación de Bun

Para más información puedes visitar https://bun.sh/docs/installation aquí te proporcionaremos los pasos básicos para su instalación.

curl https://bun.sh/install | bash

Utiliza el siguiente comando para verificar que Bun se instaló correctamente:

bun -v

Ahora, instalemos React. En tu terminal, navega hasta el lugar donde deseas guardar tu proyecto de React y luego ejecuta el siguiente comando:

bun create react [nombre de la aplicación]

A continuación, navega hasta la carpeta de tu proyecto y luego ejecuta el siguiente comando para iniciar un servidor de desarrollo local:

bun dev

Si deseas crear una versión de producción, ejecuta este comando:

bun react-scripts build

Bun no genera comandos de script como lo hace Create React App, pero puedes hacerlo simplemente instalando react-scripts. Estos scripts preconfigurados de React ejecutan las herramientas de construcción necesarias para transformar programáticamente la sintaxis JSX de React en JavaScript:

bun a react-scripts -d

Finalmente, agrega los scripts en tu archivo package.json. Luego, puedes empezar a ejecutar scripts como lo harías en un proyecto de Create React App con npm.

Agrega los siguientes scripts en tu archivo package.json:

{
"scripts":{
"start": "bun dev",
"build": "react-scripts build"
}
}

Por defecto, Bun crea una aplicación de React con JavaScript. Si deseas usar TypeScript en su lugar, simplemente cambia la extensión del archivo de .jsx a .tsx.

Prueba de Velocidad: Bun vs Node.js

Realicemos una simple prueba de velocidad para ver cuál de estos entornos de ejecución ejecuta el código más rápido. Nuestro programa es simplemente un bucle; al inicio del programa iniciamos un temporizador y cuando el bucle termina sus iteraciones, detenemos el temporizador.

Aquí está el código del programa:

for (let i = 0; i < 10000; i++) console.log(i)

Utilizamos hyperfine para hacer el benchmarking.

hyperfine "bun client2.js" "node client2.js" --warmup 5
Resultados del benchmark

Como resultado nos dice que para este simple test (recorrer un 10K iteraciones) obtenemos…

un máximo de 3 veces más rápida la ejecución utilizando BUM.

Conclusión

Bun es un potente entorno de ejecución JavaScript todo en uno que ofrece a los desarrolladores web un conjunto completo de características y herramientas. En este artículo, examinamos a fondo las características de Bun y las comparamos con otros entornos de ejecución de JavaScript populares, como Node.js y Deno. También demostramos cómo crear una aplicación simple de React con Bun y realizamos pruebas para mostrar lo rápido y eficiente que es en comparación con otros entornos de ejecución.

En resumen, Bun es una herramienta versátil y poderosa que proporciona una gran cantidad de beneficios a los desarrolladores web que buscan construir aplicaciones rápidas, eficientes y escalables.

--

--