Skip to content

Commit 9865e4d

Browse files
committed
tiempos
1 parent e884ee4 commit 9865e4d

File tree

1 file changed

+29
-21
lines changed

1 file changed

+29
-21
lines changed

readme.md

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

2-
# Benchmark de Rendimiento: .NET vs. Node.js vs. Bun BY TRILLO 🔥
2+
# Benchmark de Rendimiento: .NET vs. Bun vs. Node.js BY TRILLO 🔥
33

4-
Este documento presenta los resultados de un benchmark diseñado para medir el rendimiento de **.NET (C#), Node.js y Bun** en una tarea de procesamiento de datos intensiva y puramente computacional (CPU-bound).
4+
Este documento presenta los resultados de un benchmark diseñado para medir el rendimiento de **.NET (C#), Bun y Node.js** en una tarea de procesamiento de datos intensiva y puramente computacional (CPU-bound).
55

66
## El Desafío: "Mastica-Historial"
77

@@ -21,6 +21,12 @@ Para asegurar una comparación justa y precisa, se siguieron los siguientes prin
2121
* **Ejecución en un Solo Hilo:** Todas las pruebas se ejecutaron utilizando **un único hilo de procesamiento (single-thread)**. Esto garantiza una comparación **justa y equitativa** del rendimiento por núcleo de cada runtime.
2222
* **Compilación Optimizada:** La prueba principal de .NET se ejecutó en modo **Release**, que aplica las máximas optimizaciones. El modo Debug se incluye como referencia.
2323

24+
### Entorno de Pruebas
25+
Todas las mediciones se realizaron en el siguiente hardware para garantizar la consistencia:
26+
* **CPU:** AMD Ryzen 7 5800X (8 núcleos, 16 hilos)
27+
* **RAM:** 16 GB DDR4 3600 MHz
28+
* **Sistema Operativo:** Windows
29+
2430
## Cómo Ejecutar el Benchmark
2531

2632
Para replicar estos resultados, puedes usar los siguientes comandos desde la raíz del proyecto. Asegúrate de tener instalados .NET, Node.js y Bun.
@@ -55,50 +61,52 @@ node ./bun-mastica-historial/aot-processing.js
5561

5662
---
5763

58-
## Resultados Finales (Mejores Tiempos)
64+
## Resultados Finales (Tiempos Representativos)
65+
66+
Los tiempos presentados son representativos de múltiples ejecuciones para minimizar las variaciones puntuales.
5967

6068
| Runtime | Tiempo (segundos) | Observaciones |
6169
| :--- | :--- | :--- |
62-
| **Bun** | **1.482 s** | 🥇 **El ganador.** Rendimiento excepcional en un solo hilo para esta tarea. |
63-
| **.NET (Release)** | **1.540 s** | 🥈 **Empate técnico.** Rendimiento de primer nivel con optimizaciones completas. |
70+
| **.NET (Release)** | **~1.449 s** | 🥇 **El ganador por un margen mínimo.** Rendimiento de élite gracias al compilador JIT optimizado. |
71+
| **Bun** | **~1.473 s** | 🥈 **Empate técnico.** Rendimiento excepcional, casi idéntico al de .NET, demostrando su potencia. |
6472
| **.NET (Debug)** | **2.249 s** | 🥉 **Más rápido que Node.js,** incluso sin las optimizaciones del modo Release. |
65-
| **Node.js** | **4.407 s** | 🐢 El más lento en este escenario CPU-bound, casi 3 veces más que sus competidores directos. |
73+
| **Node.js** | **~4.324 s** | 🐢 El más lento en este escenario CPU-bound, más de 3 veces más que sus competidores directos. |
6674

6775
![Gráfico de Resultados](benchmark-result.png)
68-
*Gráfico comparando los mejores tiempos de ejecución. Menor es mejor.*
76+
*Gráfico comparando los tiempos de ejecución. .NET y Bun muestran un rendimiento casi idéntico. Menor es mejor.*
6977

7078
---
7179

7280
## Análisis Detallado de los Resultados
7381

74-
### ¿Por qué Bun es tan rápido?
82+
### .NET: Potencia y Consistencia en Modo Release
7583

76-
El sorprendente rendimiento de Bun se debe a dos factores clave:
84+
.NET se posiciona como el líder en este benchmark, confirmando su estatus como una plataforma de altísimo rendimiento.
7785

78-
1. **Motor JavaScriptCore (JSC):** A diferencia de Node.js (V8), Bun utiliza el motor de Safari (JSC). Para este tipo de bucle numérico "caliente", el compilador JIT de JSC demuestra ser extraordinariamente eficiente.
79-
2. **Implementación Nativa en Zig:** Gran parte de las APIs de Bun, incluyendo `Map`, están reescritas en Zig, un lenguaje de bajo nivel. Esto reduce la sobrecarga y optimiza al máximo operaciones críticas.
86+
* **Compilador RyuJIT:** En modo `Release`, el compilador de .NET realiza optimizaciones agresivas y muy avanzadas, llevando el código C# a un rendimiento de metal nativo. Superar a Node.js incluso en modo Debug es un testimonio de la eficiencia base del runtime.
87+
* **Potencial de Escalabilidad:** .NET tiene una ventaja no explotada aquí: el paralelismo. Con un simple cambio a `Parallel.For`, podría haber distribuido la carga entre todos los cores del Ryzen 7, reduciendo drásticamente el tiempo de ejecución.
8088

81-
### .NET: Potencia y Consistencia
89+
### ¿Por qué Bun está a la par con .NET?
8290

83-
.NET confirma su estatus como una plataforma de alto rendimiento.
91+
El rendimiento de Bun es extraordinario y lo coloca en la misma liga que .NET para este tipo de tareas.
8492

85-
* **Compilador RyuJIT:** En modo `Release`, el compilador de .NET realiza optimizaciones muy avanzadas, llevando el código C# a un rendimiento de élite. El hecho de que supere a Node.js incluso en modo Debug es un testimonio de la eficiencia base del runtime.
86-
* **Potencial de Escalabilidad:** .NET tiene una ventaja no explotada aquí: el paralelismo. Con un simple cambio a `Parallel.For`, podría haber distribuido la carga entre todos los cores, reduciendo drásticamente el tiempo de ejecución.
93+
1. **Motor JavaScriptCore (JSC):** A diferencia de Node.js (V8), Bun utiliza el motor de Safari. Para este tipo de bucle numérico "caliente", el compilador JIT de JSC demuestra ser extremadamente eficiente.
94+
2. **Implementación Nativa en Zig:** Gran parte de las APIs de Bun, incluyendo `Map`, están reescritas en Zig, un lenguaje de bajo nivel. Esto reduce la sobrecarga y optimiza al máximo operaciones críticas que en otros runtimes ocurren a un nivel más alto.
8795

8896
### ¿Por qué Node.js se queda atrás en *esta* prueba?
8997

90-
Este resultado no significa que Node.js sea lento. Node.js es una plataforma increíblemente rápida para su principal caso de uso: **aplicaciones I/O-bound** (servidores web, APIs).
98+
Este resultado no significa que Node.js sea lento. Node.js es una plataforma increíblemente rápida para su principal caso de uso: **aplicaciones I/O-bound** (servidores web, APIs, microservicios).
9199

92-
Sin embargo, este benchmark es **100% CPU-bound**. En este escenario, las optimizaciones del motor V8 no resultan tan eficaces como las de Bun o .NET.
100+
Sin embargo, este benchmark es **100% CPU-bound**. En este escenario, las optimizaciones del motor V8, aunque excelentes para código JavaScript dinámico y de corta duración, no resultan tan eficaces para bucles numéricos intensivos y sostenidos como las de Bun o .NET.
93101

94102
## Conclusiones
95103

96-
1. **Bun es un competidor formidable:** Para tareas de cómputo intensivo en JavaScript, Bun ofrece un rendimiento de vanguardia que desafía a los runtimes más establecidos.
104+
1. **.NET y Bun son competidores de élite:** Para tareas de cómputo intensivo, tanto .NET como Bun ofrecen un rendimiento de vanguardia que los coloca en un empate técnico, desafiando las percepciones tradicionales de rendimiento entre código compilado y JavaScript.
97105

98-
2. **.NET es un pilar de rendimiento:** Sigue siendo una de las mejores opciones para backends que requieren alto rendimiento, con un ecosistema maduro y excelentes capacidades de paralelización.
106+
2. **.NET es un pilar de rendimiento y madurez:** Sigue siendo una de las mejores opciones para backends que requieren alto rendimiento, con un ecosistema maduro y capacidades de paralelización listas para usar que le darían una ventaja aún mayor en hardware multi-core.
99107

100108
3. **Elige la herramienta adecuada para el trabajo:**
101-
* Para **servidores API y tareas asíncronas (I/O)**, **Node.js** sigue siendo una opción excelente y robusta.
109+
* Para **servidores API y tareas asíncronas (I/O)**, **Node.js** sigue siendo una opción excelente, robusta y con el ecosistema más grande.
102110
* Para **algoritmos de procesamiento de datos y tareas CPU-intensivas**, **.NET** o **Bun** ofrecen un rendimiento significativamente superior.
103111

104-
4. **¡Compila en modo Release!** La diferencia entre .NET Debug (**2.249 s**) y Release (**1.540 s**) es una **mejora de rendimiento de casi el 50%**. Esto subraya la importancia crítica de nunca medir el rendimiento en una compilación de desarrollo.
112+
4. **¡Compila en modo Release!** La diferencia entre .NET Debug (**2.249 s**) y Release (**~1.449 s**) es drástica. El código optimizado es aproximadamente un **55% más rápido**. Esto subraya la importancia crítica de nunca medir el rendimiento en una compilación de desarrollo.

0 commit comments

Comments
 (0)