Un hombre sabio me dijo una vez: "Cuando empieces a comer Bun (panecillo), Node.js se sentirá insípido".

Pero ¿por qué es eso relevante? JavaScript se volvió mucho más rápido con un nuevo entorno de ejecución de JavaScript llamado Bun, que ahora está listo para producción con su versión 1.0.

¿Cómo y por qué es más rápido que Node.js? Me vienen a la mente muchas preguntas.

Responderé algunas de esas preguntas en este artículo. Y lo haré rápidamente, ya que ahora soy más rápido, al igual que JavaScript, que se prepara con Bun 1.0.

But-why-is-that-relevant--3-

Bun es un conjunto de herramientas rápidas todo en uno para ejecutar, crear, probar y depurar JavaScript y TypeScript, desde un único archivo hasta una aplicación full-stack.

A continuación algunas cosas que podemos hacer con Bun:

Ejecuta tu código más rápido con Bun

Ahora no necesitamos herramientas como npm, pnpm o yarn porque Bun es 17 veces mas rápido. Eche un vistazo a los datos mostrados a continuación:

266451126-23cbde35-b859-41b5-9480-98b88bf40c44
Comparación de velocidades entre Bun, pnpm, npm y yarn

Bun tarda solo 0,36 segundos en compilar su código, mientras que tarda unos 6,44 segundos en el caso de pnpm, 10,58 segundos con npm y 12,08 segundos con yarn.

Bun soporta hot reloading

Bun soporta hot reloading (recarga en caliente) desde el primer momento, por lo que no necesita herramientas como Nodemon. Actualizará automáticamente el servidor cuando se ejecute JavaScript o TypeScript.

Puede reemplazar el comando npm run con bun run para ahorrar más de 150 ms milisegundos cada vez que ejecuta un comando.

Aquí un gráfico completo:

Screenshot-2023-09-14-at-7.17.45-PM-1
Promedio de tiempos de hot realoding usando diferentes paquetes

Según el cuadro anterior, el uso de npm tarda unos 176 ms en ejecutarse, yarn tarda unos 131 ms. En el caso de pnpm, se necesitan 259 ms. Sin embargo, en el caso de Bun, se necesitan unos 7 ms. Eso es rápido, ¿no?

Bun es un empaquetador JavaScript

Bun también es un empaquetador de JavaScript con el mejor rendimiento de su clase y una API compatible con ESBuild, por lo que no necesitamos cosas como:

  • ESBuild
  • Webpack
  • Parcel, .parcelrc
  • Rollup, rollup.config.js
But-why-is-that-relevant--2-

Bun ahora soporta Next.js, Remix, Nuxt, Astro, SvelteKit, Nest, SolidStart y Vite.

Bun es compatible con ESM y CommonJS

Otra gran característica de Bun es que podemos usar módulos ES6 y CommonJs juntos en el mismo archivo, lo que no era posible en Node.js.

Puedes usar import y require() en el mismo archivo:

import lodash from "lodash";
const _ = require("underscore");
ESM y CommonJs en el mismo archivo

Aparte de eso, Bun tiene soporte integrado para las API estándar web que están disponibles en los navegadores, como fetch, junto con la propia API de Bun como Bun.file() para leer un archivo de forma diferida y Bun.Write() para escribir un archivo al sistema de archivos local, que es mucho más simple que Node.js.

Ejemplo Bun.file()

const archivo = Bun.file("package.json");
const contenido = await archivo.text();
Leemos archivos del sistema de archivos con Bun

El código anterior leerá el contenido de un archivo package.json y transferirá su contenido a una nueva variable llamada contenido.

Ejemplo Bun.write()

await Bun.write("index.html", "<html/>");
await Bun.write("index.html", Buffer.from("<html/>"));
await Bun.write("index.html", Bun.file("home.html"));
await Bun.write("index.html", 
await fetch("https://ejemplo.com/"));
Escribimos archivos en el sistema de archivos

En el código anterior, Bun.write() escribirá la cadena "<html/>", o copiará el contenido del archivo home.html en el archivo index.html. Si tenemos que recuperar datos, obtendrá los resultados de una API web externa y escribirá el contenido en un archivo index.html.

¿Por que Bun es tan rápido?

Bun es rápido porque usa el motor JavaScriptCore, mientras que Node.js usa el motor JavaScript V8. El primero se ha optimizado para un tiempo de inicio más rápido.

But-why-is-that-relevant
Bun usa JavaScriptCore | Node usa V8

Si deseas hacer las cosas más rápido, debería considerar reemplazar Node.js con Bun.

¿Cómo empezar a usar Bun?

Puedes instalar Bun en sistemas MacOS y Linux usando npm:

npm install -g bun
Comando para instalar Bun en MacOs y distribuciones Linux

Ahora ya está todo listo. Para instalar un paquete npm, haz esto:

bun install <nombre-paquete>
Comando para instalar paquetes usando Bun

Para iniciar una aplicación, haz esto:

bun run dev
Ejecutar una app Next.js

Para todo lo que pueda necesitar solo reemplace npm con bun.

Sin embargo, Bun sólo está listo para producción en los sistemas operativos MacOS y Linux. La versión de Windows aún es experimental. Por el momento, solo se admite el entorno de ejecución de JavaScript para Windows, y no el administrador de paquetes, el empaquetador ni el entorno de pruebas. Puedes leer más al respecto aquí.

Conclusión

Este artículo muestra cómo puedes utilizar Bun como alternativa a Node.js y acelerar su tiempo de desarrollo.

También puedes ver mi vídeo sobre El asesino de Node.js está aquí — Primer vistazo a Bun 1.0 (en inglés).

Gracias por leer.