Was ist Ihre aktuelle JavaScript-Laufzeit und warum ist es Node.js? Aber haben Sie gehört, dass es eine neue Lösung in der Stadt gibt? Bun ist ein nativer Code-Bundler, Transpiler und Task-Runner mit einem integrierten npm-Client. Die Entwickler versprachen, unser Bedürfnis nach Geschwindigkeit zu erfüllen, und räumten der Leistung von Bun Vorrang vor allen anderen Funktionen ein. In diesem Artikel zeige ich Ihnen, wie Sie ein bestehendes Node.js-Projekt auf dieser neuen JavaScript-Laufzeit starten und vergleichen, ob Bun wirklich der schnellste da draußen ist.
Das Wichtigste zuerst, was ist JavaScript-Laufzeit?
In einer Laufzeitumgebung wird Ihr Programm ausgeführt. Du kannst es schaffen:
- durch den integrierten Browser der JavaScript-Engine (V8 entwickelt vom Chromium Project für Google Chrome)
- auf Serverumgebungen (wie Node.js oder Bun), die de-facto-Implementierungen eines „Browsers“ sind, der auf dem Server läuft.
Es gibt nur wenige Javascript-Laufzeiten auf dem Markt. Zum Zeitpunkt des Schreibens dieses Artikels sehen die ersten drei so aus.
Node.js
Node.js – die beliebteste (von GitHub-Stars), die älteste, aber vor allem „die Erste“. Vor Node existierte JS nur im Browser, daher haben wir viel zu verdanken.
Bei The Software House führen wir unsere JS-Anwendungen auf Node.js aus, da es sich um eine etablierte JS-Ausführungsumgebung handelt. Tatsächlich ist es das einzige, das von AWS Lambda und GCP Functions unterstützt wird.
Wenn Sie hier sind, kennen Sie Node definitiv in- und auswendig, also machen wir weiter.
Deno
Auf dem zweiten Platz gibt es Deno. Wir haben bereits einige Versuche unternommen, Deno auszuprobieren, und wir haben ihm wirklich eine Chance gegeben. Leider fanden wir es nicht überzeugend genug, auf diese noch etwas unausgereifte JS-Laufzeitumgebung umzusteigen.
Lesen Sie mehr über unsere Deno-Erfahrungen:
- Deno-Tutorial – praktischer Überblick über den Rivalen von Node.js
- Lassen Sie uns eine REST-API mit Deno erstellen! Ein genauerer Blick auf die Alternative von Node
Aber die Tatsache war eine Tatsache – ein Wettbewerb erschien. Wir waren seitdem gespannt, ob etwas anderes als Node.js und Deno die Hoffnungen der JS-Entwickler auf superschnelle JS-Anwendungen erfüllen würde.
Und dann wurde Bun gebacken Ofen!
Was ist Brötchen?
Den dritten Platz belegt zum jetzigen Zeitpunkt frisch und knackig Brötchen – die neueste und am schnellsten wachsende JS-Laufzeitumgebung. Bun erregte viel Aufmerksamkeit, als es im August 2022 eine Finanzierung in Höhe von 7 Millionen US-Dollar erhielt.
Das gesamte Bun-Projekt konzentriert sich auf Leistung und darauf, ein All-in-One-Tool zu sein (Laufzeit, Bundler, Paketmanager, Transpiler).
Im „traditionellen“ Node.js benötigen Sie die kombinierte Leistung einiger Tools, um die gleichen Ziele zu erreichen: npm, Webpack usw.
Wie soll Bun schneller sein als Node?
Um seine Leistung zu steigern, schrieb das Bun-Team es von Grund auf neu in Zig, einer Low-Level-C-Alternative. Die Browser-Engine, die JS-Code in Bun ausführt, basiert auf JavaScript Core – der JS-Engine in Safari, die als schneller gilt als V8 von Node, die Engine in Chromium.
Bunships und das Entwicklungsteam behaupten, dass es schneller ist, weil enorm viel Zeit für das Profilieren, Benchmarking und Optimieren von Dingen aufgewendet wird. Das allgemeine Thema: Zigs Low-Level-Kontrolle über den Speicher und das Fehlen eines versteckten Kontrollflusses machen es so viel einfacher, schnelle Software zu schreiben.
Zusammenfassend behaupten die Entwickler von Bun, dass es 4-mal mehr Anfragen pro Sekunde verarbeitet und Pakete 30-mal schneller installiert werden als mit npm.
Meine Zeit mit Bun
Nachdem ich die Zusicherungen des Bun-Erstellers und die Community-Diskussion gelesen hatte, dachte ich: „Das sind einige große Behauptungen“. Ich war neugierig, ob das stimmt, was sie sagen. Ist Bun wirklich so schnell? Tatsächlich schneller als Node.js?
Ich habe bereits einige Benchmarks (und andere technische Lösungen für diese Angelegenheit) gesehen, die der Welt versprochen, aber kaum geliefert wurden, also würde ich Node nicht ohne harte Daten ersetzen. Also habe ich getan, was getan werden musste: Bun installieren und die Nummer mit einigen Leistungstests ermitteln.
Kommen wir zur Umsetzung.
Wie führe ich meine Express-App mit Bun aus?
Um Bun zu testen, habe ich das hausgemachte (oder sollte ich eher „officemade“ sagen) von The Software House verwendet. Express-Boilerplate. Dieser Boilerplate ist hochgradig skalierbar und konzentriert sich auf Leistung und Best Practices Boilerplate-Code für Node.js- und TypeScript-Apps.
Wenn Sie Ihre Node.js-Projekte noch schneller starten möchten, finden Sie hier eine detaillierte Übersicht der TSH-Original-Boilerplate:
- Erstellen Sie mit dieser Boilerplate schneller skalierbare Node.js-Apps
Um Bun auszuführen, müssen Sie also die folgenden Schritte ausführWie Sie sehen können, läuft ohne Änderungen.
Vergleichen wir Bun und Node!
1. Paketinstallationszeit
Der erste Test, den wir durchführen, ist die Paketinstallationszeit. Wir haben einen einfachen Test durchgeführt, um den realen Arbeitsablauf zu simulieren.
- Npm führt installierte 1273 Pakete in 23 Sekunden aus,
- Brötchenlauf installiert 1003 in 15,6 Sekunden.
*Haftungsausschluss: Bun ist zwar 32 % schneller, aber die Ausführungszeit ist nicht so schnell, wie der Schöpfer von Bun versprochen hat
2. Docker-Image
Das zweite, was verglichen werden muss, ist das Erstellen des ersten Docker-Images.
Die Verwendung von Bun scheint die Docker-Image-Erstellungszeit nicht zu beeinflussen.
3. App-Builder
Test Nummer drei wird prüfen, wie Bun und npm mit dem Start des App-Builders umgehen.
Der Unterschied ist so gering, dass es keinen Grund gibt, absichtlich auf Bun umzusteigen.
4. Startzeit der Anwendung
Das vierte, was wir vergleichen, ist die Startzeit der Anwendung.
…aber auch hier ist der Unterschied vernachlässigbar.
Nun das wichtigste. Ist Bun schneller als Node?
Unten testen wir das einfache get endpoint /health
Das Tool, das wir in diesem Test verwenden, is – ein modernes HTTP-Benchmarking-Tool, das in der Lage ist, eine erhebliche Last zu erzeugen, wenn es auf einer einzelnen Mehrkern-CPU ausgeführt wird.
In diesen Tests verwenden wir Knoten 16.15.0 und Brötchen 0.2.1.
Testen Sie 1. 10000 Verbindungen in 60 Sekunden mit einer variablen Anzahl von Threads
Okay, fair genug. Wie wäre es, wenn wir es mit anderen Parametern ein wenig optimieren?
10 Threads in 60 Sekunden, mit einer variablen Anzahl von Verbindungen
Wie Sie sehen können, sind die Ergebnisse abhängig von der Anzahl der Verbindungen und der Anzahl der Threads ähnlich. Aber in den meisten Fällen ist Node.js schneller. So…
Sollten Sie von Node zu Bun wechseln? Wahrscheinlich nicht
Ich habe gute und schlechte Nachrichten.
Die schlechte Nachricht: Bun wird in absehbarer Zeit kein Ersatz für Node sein
Für diesen Artikel habe ich eine vorhandene Node.js-Anwendung verwendet. Ich kann Ihnen sagen, dass es sich nicht lohnt, Ihre stabile Node-App auf Bun auszuführen. Auch wenn es enormes Potenzial und Raum für Erweiterungen gibt – im Moment ist es einfach zu unausgereift. Bun’s noch neu hat keine vollständige Dokumentation, und bei der Implementierung können verschiedene Fehler auftreten. Außerdem bin ich mir ziemlich sicher, dass es in absehbarer Zeit in serverlosen Lösungen mit AWS Lambda oder Google Cloud Functions nicht nützlich sein wird (zum jetzigen Zeitpunkt ist Node.js die einzige unterstützte Umgebung). Es wird einige Zeit dauern, bis Bun.js wächst und zu einer Technologie wird, die wir in kommerziellen Projekten einsetzen können. Derzeit werden Buns winzige Gewinne bei Geschwindigkeitstests die verlorene Zeit nicht kompensieren, wenn Sie auf unerwartete Fehler stoßen.
Wenn Sie ein neues selbst gehostetes Frühphasenprojekt gestartet haben, können Sie Bun.js von Anfang an verwenden und für die Arbeit mit Bun optimieren. Dann sicher – Tue es!
Ein kleiner Trost für das Bun-Team, während sie wahrscheinlich ihre Lösung verbessern – Sie haben es bereits getan das süßeste Logo im Spiel. Schauen Sie sich nur noch einmal an, wie süß es ist!
Die gute Nachricht: Node.js wird zu Innovationen gezwungen
Jetzt hat Node.js nicht nur einen, sondern zwei potenzielle Konkurrenten auf dem Markt. Ich wette, das Node-Team wird „motivierter“ sein, die Leistung seines Produkts so weit wie möglich zu steigern.
Ich glaube, dass diese Technologien wahrscheinlich im Ökosystem koexistieren werden, anstatt dass eine die andere verdrängt, ähnlich wie mehrere JDK-Distributionen in der Java-Welt entstanden sind, wobei eine hauptsächlich aus Lizenzgründen über der anderen ausgewählt wird. Aber wenn man die sich schnell verändernde Welt von JavaScript kennt, wird bald eine neue Technologie erscheinen, die den Markt erobern will.