You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: readme.md
+29-21Lines changed: 29 additions & 21 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,7 +1,7 @@
1
1
2
-
# Benchmark de Rendimiento: .NET vs. Node.js vs. Bun BY TRILLO 🔥
2
+
# Benchmark de Rendimiento: .NET vs. Bun vs. Node.js BY TRILLO 🔥
3
3
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).
5
5
6
6
## El Desafío: "Mastica-Historial"
7
7
@@ -21,6 +21,12 @@ Para asegurar una comparación justa y precisa, se siguieron los siguientes prin
21
21
***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.
22
22
***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.
23
23
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
+
24
30
## Cómo Ejecutar el Benchmark
25
31
26
32
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.
Los tiempos presentados son representativos de múltiples ejecuciones para minimizar las variaciones puntuales.
59
67
60
68
| Runtime | Tiempo (segundos) | Observaciones |
61
69
| :--- | :--- | :--- |
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. |
64
72
|**.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. |
66
74
67
75

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.*
69
77
70
78
---
71
79
72
80
## Análisis Detallado de los Resultados
73
81
74
-
### ¿Por qué Bun es tan rápido?
82
+
### .NET: Potencia y Consistencia en Modo Release
75
83
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.
77
85
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.
80
88
81
-
### .NET: Potencia y Consistencia
89
+
### ¿Por qué Bun está a la par con .NET?
82
90
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.
84
92
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.
87
95
88
96
### ¿Por qué Node.js se queda atrás en *esta* prueba?
89
97
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).
91
99
92
-
Sin embargo, este benchmark es **100% CPU-bound**. En este escenario, las optimizaciones del motor V8no 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.
93
101
94
102
## Conclusiones
95
103
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.
97
105
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.
99
107
100
108
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.
102
110
* Para **algoritmos de procesamiento de datos y tareas CPU-intensivas**, **.NET** o **Bun** ofrecen un rendimiento significativamente superior.
103
111
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