A comparative analysis of the performance of JavaScript code execution environments: Node.js, Deno and Bun
Metadane
- Autorzy: Andrei Aleksandrovich Smirnov, Egor Aleksandrovich Podolskiy, Artem Vyacheslavovich Cherenkov, Ilia Borisovich Gosudarev
- Rok: 2024
- Źródło: Программные системы и вычислительные методы (Programming Systems and Computational Methods), nr 4, s. 109–123
- DOI: 10.7256/2454-0714.2024.4.72206
- Status: to-read
- Kategoria główna: Systems
- Podkategorie: JavaScript Runtimes, Performance Benchmarking
- Tagi:
#javascript#nodejs#deno#bun#runtime#performance#benchmark#comparison#project:js-runtime-energy
Streszczenie
Pierwsza akademicka praca bezpośrednio porównująca trzy główne środowiska uruchomieniowe JavaScript: Node.js, Deno i Bun. Autorzy proponują holistyczną i walidowalną metodologię pomiaru i porównania wydajności kodu JS. Eksperymenty prowadzone z użyciem kontenerów Docker i automatyzacji przez Ansible. Mierzą czas wykonania różnych scenariuszy obliczeniowych.
Kluczowy gap: Praca nie mierzy zużycia energii — wyłącznie czas. To jest główna luka, którą wypełnia proponowane badanie JE-1.
Kluczowe Wnioski
- Bun: najlepszy w synchronicznych operacjach (sortowanie, przetwarzanie JSON)
- Bun: gorszy od Node.js i Deno przy sprawdzaniu liczb pierwszych (operacje CPU-intensive)
- Deno: wysoka wydajność w operacjach asynchronicznych (Rust + biblioteka Tokio)
- Node.js: niższe wyniki w synchronicznych zadaniach, ale stabilna wydajność — solidny wybór dla dużych projektów
- Pierwsza praca proponująca “holistyczną i walidowalną metodologię” pomiaru wydajności JS runtimeów
Metodologia
- Środowisko: Docker containers (izolacja) + Ansible (automatyzacja)
- Mierzona metryka: czas wykonania (NIE energia!)
- Scenariusze testowe: sortowanie tablic, przetwarzanie JSON, sprawdzanie liczb pierwszych, operacje asynchroniczne
- Protokół: automatyczne uruchamianie, zbieranie wyników
Główne Koncepcje
- Node.js: najbardziej dojrzałe środowisko, V8 (Google), npm ekosystem
- Deno: stworzony przez twórcę Node.js (Ryan Dahl), TypeScript natywnie, bezpieczeństwo, Rust + Tokio
- Bun: nowy, wysokowydajny runtime, JavaScriptCore (Apple), szybka inicjalizacja
Wyniki
| Test | Najlepszy | Najgorszy |
|---|---|---|
| Sortowanie | Bun | Node.js |
| JSON parse/serialize | Bun | Node.js |
| Liczby pierwsze (CPU) | Node.js/Deno | Bun |
| Async I/O | Deno | Node.js |
Przydatne Cytaty
“For the first time, a holistic and valid methodology for measuring and comparing JavaScript code performance in modern runtime environments has been proposed.” (Abstract)
“Bun shows the best performance in synchronous computations (sorting, JSON processing), but is behind Node.js and Deno in checking for prime numbers.” (Abstract)
Datasety
- Własne benchmarki w Docker/Ansible (nie opublikowane publicznie jako osobny dataset)
Powiązane Tematy
- Gap badawczy JE-1: dodanie wymiaru energetycznego do tego porównania
- Pereira 2017/2021 (metodologia RAPL dla JS)
- De Macedo 2022 (Wasm vs JS energia)
- PowerJoular (narzędzie do pomiaru energii)