Node.js
Node.js ist eine plattformübergreifende Open-Source-JavaScript-Laufzeitumgebung, die JavaScript-Code außerhalb eines Webbrowsers ausführen kann. Damit kann zum Beispiel ein Webserver betrieben werden. Node.js wird in der JavaScript-Laufzeitumgebung V8 ausgeführt, die ursprünglich für Google Chrome entwickelt wurde, und bietet eine ressourcensparende Architektur, die eine besonders große Anzahl gleichzeitig bestehender Netzwerkverbindungen ermöglicht.[9][10][11] Node.js wurde ursprünglich von Ryan Dahl 2009 entwickelt, einem Software-Entwickler aus San Diego, Kalifornien.[12] 2018 stellte Ryan Dahl mit Deno einen Nachfolger für Node.js vor, der einige als grundlegende Probleme identifizierte Eigenschaften von Node.js beheben soll.[13]
Node.js
| |
---|---|
Basisdaten
| |
Entwickler | OpenJS Foundation, Ryan Dahl |
Erscheinungsjahr | 27. Mai 2009[1] |
Aktuelle Version | 22.9.0 (Current) 17. Sep. 2024[2] |
Betriebssystem | Linux, Microsoft Windows[5], BSD-Betriebssystem[5], macOS[5], Unix-ähnliches System, AIX, Android[6], iOS |
Programmiersprache | C[7], C++, JavaScript |
Kategorie | Framework, Interpreter |
Lizenz | MIT-Lizenz[8] |
nodejs.org |
Architektur
BearbeitenDie Skriptsprache JavaScript gibt eine ereignisgesteuerte Architektur vor. Diese hat im Server-Betrieb den Vorteil, pro bestehender Verbindung weniger Arbeitsspeicher zu benötigen als bei vergleichbaren Anwendungen, die für jede geöffnete Verbindung einen eigenen Thread starten.
Performance
BearbeitenNode.js wird mit besonderem Fokus auf die Performance entwickelt. So kommt nonblocking I/O statt standardmäßigem blockierendem I/O zum Einsatz.
Zugriffe auf das Netzwerk und Dateisystem werden über die von Libuv bereitgestellte Ereignisschleife (event loop) und den darunterliegenden Thread Pool abgearbeitet.[14] Dadurch werden weniger eigene Threads erstellt und der Overhead minimal gehalten.
Module
BearbeitenNode.js enthält einige Module, die direkt in das Binärpaket kompiliert wurden. Dazu gehören neben dem Modul für asynchronen Netzwerkzugriff auch Adapter für das Dateisystem, Puffer, Zeitgeber und eine allgemein gehaltene Datenstrom-Klasse.
Darüber hinaus können zusätzliche Module eingebunden werden, zum Beispiel über vorkompilierte Dateien mit der Dateiendung .node oder in Form einfacher JavaScript-Dateien. Die JavaScript-Module folgen der CommonJS-Konvention, einem Standard für JavaScript-Systeme, die außerhalb von Browsern betrieben werden, und stellen somit über eine Variable namens exports Zugriff auf Funktionen und Variablen des entsprechenden Moduls her.[15]
Zur Verwaltung der Module gibt es den Paketmanager npm, in dessen Depot sich über 751.000 Pakete (Stand: Juli 2018) befinden.[16] Dieser sorgt unter Berücksichtigung von Abhängigkeiten für die Installation, Aktualisierung und das Kompilieren von Binärmodulen.[17]
Kritik
BearbeitenDer ursprüngliche Entwickler von Node.js, Ryan Dahl, kritisierte das Node.js-Projekt stark. Das Build-System von Node.js (node-gyp) bezeichnete er als den größten Fehler des Projekts. Im Rahmen der JSConf EU 2018 benannte er zehn große Designfehler der Laufzeitumgebung. Das Build-System von Node.js sei immens kompliziert und von gewöhnlichen Programmierern schwer zu handhaben. Damit meinte er Module, die nicht in JavaScript, sondern in anderen Sprachen wie C++ geschrieben wurden und im Build-Prozess kompiliert werden müssen.[18] Auch kritisierte er die Komplexität des Modulsystems. Seine Vorstellung einer neuen Laufzeitumgebung Deno klang wie eine Entschuldigung an all die Programmierer, die unter der von ihm entwickelten Technologie gelitten hatten. Dabei wurden die meisten Design-Entscheidungen nicht von ihm, sondern anderen Entwicklern gefällt. Ryan Dahl war nur bis 2012 Projektleiter von Node.js.[19]
Beispiele
BearbeitenHTTP-Server-Version eines Hallo-Welt-Programmes in Node.js, das text/html als Content-Type-Header und den Port 3000 verwendet:
const http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {
'Content-Type': 'text/html'
});
res.write('Hallo Welt');
res.end();
}).listen(3000);
Als weiteres Beispiel ein einfacher TCP-Server, der auf Port 7000 Daten empfängt, mit „Hallo“ antwortet und dann alle empfangenen Daten unverändert zum Client zurücksendet:
const net = require('net');
const endOfLine = require('os').EOL;
const server = net.createServer(function (socket) {
socket.setEncoding('utf8');
socket.write('Hallo' + endOfLine);
socket.pipe(socket, {
end: false
});
socket.on('end', function () {
socket.end('Auf Wiedersehen' + endOfLine);
});
});
server.listen(7000, 'localhost');
Ehemaliger Fork „io.js“
BearbeitenAufgrund von Unzufriedenheit mit dem Tempo der Weiterentwicklung spaltete sich das Projekt io.js von Node.js ab, in dem einige der wichtigsten Node.js-Entwickler weiterarbeiteten, die mit dem Mutterprojekt unzufrieden waren.[20][21] Das erste Release wurde am 13. Januar 2015 freigegeben. Der Fork ist kompatibel zu Node.js und dem Node Package Manager.[22] Am 15. Mai 2015 verkündeten beide Projekte die Zusammenführung zur Node.js-Foundation, die eine gemeinsame Weiterentwicklung unter einem Open-Government-Modell ermöglichen soll.[23][24] Die Zusammenführung wurde mit dem Erscheinen von Node.js 4.0 abgeschlossen.[25]
Versionen
BearbeitenNeue Hauptversionen werden alle sechs Monate veröffentlicht. Mit geraden Nummern versehene Versionen werden im April veröffentlicht, mit ungeraden Nummern versehene im Oktober. Wenn eine neue ungerade Versionsnummer veröffentlicht wird, wechselt die vorige gerade in den LTS-Zustand (Long Term Support), wird zunächst weitere 12 Monate aktiv gepflegt und anschließend weitere 18 Monate nur noch gewartet.[26]
Version | Codename | Veröffentlichung | LTS-Status | Start aktives LTS | Start Wartung | Ende Wartung |
---|---|---|---|---|---|---|
v0.10.x | 2013-03-11 | eingestellt | - | 2015-10-01 | 2016-10-31 | |
v0.12.x | 2015-02-06 | eingestellt | - | 2016-04-01 | 2016-12-31 | |
4.x | Argon[26] | 2015-09-08 | eingestellt | 2015-10-01 | 2017-04-01 | 2018-04-30 |
5.x | 2015-10-29 | kein LTS | N/A | 2016-06-30 | ||
6.x | Boron[26] | 2016-04-26 | eingestellt | 2016-10-18 | 2018-04-30 | 2019-04-30 |
7.x | 2016-10-25 | kein LTS | N/A | 2017-06-30 | ||
8.x | Carbon[26] | 2017-05-30 | eingestellt | 2017-10-31 | 2019-01-01[27] | 2019-12-31 |
9.x | 2017-10-01 | kein LTS | N/A | 2018-06-30 | ||
10.x | Dubnium[26] | 2018-04-24 | eingestellt | 2018-10-30 | 2020-04-01 | 2021-04-01 |
11.x | 2018-10-23 | kein LTS | N/A | 2019-06-01 | ||
12.x | Erbium[26] | 2019-04-23 | eingestellt | 2019-10-22 | 2020-10-20 | 2022-04-30 |
13.x | 2019-10-22 | eingestellt | N/A | 2020-04-01 | 2020-06-01 | |
14.x | Fermium[26] | 2020-04-21 | eingestellt | 2020-10-20 | 2021-10-20 | 2023-04-30 |
15.x | 2020-10-21 | eingestellt | N/A | 2021-04-01 | 2021-06-01 | |
16.x | Gallium[26] | 2021-04-20 | eingestellt | 2021-10-26 | 2022-10-18 | 2023-09-11[28] |
17.x | 2021-10-19 | eingestellt | N/A | 2022-04-01 | 2022-06-01 | |
18.x | Hydrogen[26] | 2022-05-03 | Wartung | 2022-10-25 | 2023-10-18 | 2025-04-30 |
19.x | 2022-10-17 | eingestellt | N/A | 2023-04-01 | 2023-06-01 | |
20.x | Iron[26] | 2023-04-18 | LTS | 2023-10-24 | 2024-10-22 | 2026-04-30 |
21.x | 2023-10-17 | eingestellt | N/A | 2024-04-01 | 2024-06-01 | |
22.x | 2024-04-24 | aktuell | 2024-10-29 | 2025-10-21 | 2027-04-30 | |
23.x | 2024-10-15 | geplant | N/A | 2025-04-01 | 2025-06-01 | |
24.x | 2025-04-22 | geplant | 2025-10-28 | 2026-10-20 | 2028-04-30 |
Projekte
BearbeitenEine Liste von ausgewählten Projekten, die auf Node.js basieren:
- Etherpad Lite, ein kollaborativer Text-Editor[29][30]
- PDFKit[31]
- WebOS von vormals HP[32]
- StackVM,[33] darauf aufbauend browserling[34] (Cross-Browser-Testen im Browser)
- NodeBB,[35][36] eine Echtzeit-Internetforen-Software
- Ghost,[37][38] das von der Blog-Software WordPress inspiriert wurde
- Trello, eine webbasierte Projektmanagementsoftware
Darüber hinaus enthält das offizielle Node.js-Wiki eine Liste von Projekten, Anwendungen und Unternehmen, die Node.js einsetzen.[39]
Auszeichnungen
BearbeitenLiteratur
Bearbeiten- Golo Roden: Node.js & Co. 1. Auflage. dpunkt Verlag, Heidelberg 2012, ISBN 978-3-89864-829-5.
- Sebastian Springer: Node.js: Das umfassende Handbuch. 1. Auflage. Galileo Computing, 2013, ISBN 978-3-8362-2119-1.
- Golo Roden: Gestatten, Node.js, Heise online, 18. Oktober 2012.
- Felix Geisendörfer: Wie Node.js JavaScript auf dem Server revolutioniert: Schubrakete für JavaScript. T3N Magazin, 8. Dezember 2010.
- Oliver Ochs: JavaScript auf dem Server mit Node, in: JavaScript für Enterprise-Entwickler. 1. Auflage. dpunkt Verlag, Heidelberg 2012, ISBN 978-3-89864-728-1, S. 133 ff.
- Tom Hughes-Croucher, Mike Wilson: Einführung in Node.js. 1. Auflage. O’Reilly, 2012, ISBN 978-3-86899-797-2.
Weblinks
Bearbeiten- Website des Projektes node.js (englisch)
- Website der Paketverwaltung npm (englisch)
- Bericht über Node.js auf Chaosradio Express
- Website des Projekts io.js ( vom 14. Februar 2016 im Internet Archive) (englisch)
- tech:lounge, ein ausführlicher und kostenfreier Einführungs-Videokurs
- Beispielanwendung TextUrl von sharkbyte
- Node.js Tutorial – Learn basics of Node.js (englisch)
Einzelnachweise
Bearbeiten- ↑ node-v0.x-archive on GitHub. (abgerufen am 2. September 2016).
- ↑ 2024-09-17, Version 22.9.0 (Current), @RafaelGSS. Abgerufen am 27. September 2024.
- ↑ 2024-10-03, Version 20.18.0 'Iron' (LTS), @targos. Abgerufen am 8. Oktober 2024 (englisch).
- ↑ 2024-07-08, Version 18.20.4 'Hydrogen' (LTS), @RafaelGSS. Abgerufen am 1. August 2024 (englisch).
- ↑ a b c In: Free Software Directory.
- ↑ In: GitHub.
- ↑ The node Open Source Project on Open Hub: Languages Page. In: Open Hub. (abgerufen am 18. Oktober 2018).
- ↑ node/LICENSE at master · nodejs/node · GitHub. (abgerufen am 27. November 2020).
- ↑ About Node.js®. Abgerufen am 8. Juni 2020 (englisch).
- ↑ Sebastian Springer: Node.js: Das JavaScript-Framework im Überblick. 31. März 2013, abgerufen am 8. Juni 2020.
- ↑ Was ist Node.js? ( vom 29. Mai 2018 im Internet Archive)
- ↑ training.com Developed originally in 2009 by Ryan Dahl, Node.js is an open-source, JavaScript run time environment. ( des vom 1. April 2017 im Internet Archive) Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.
- ↑ heise.de Ryan Dahl: Designfehler von Node.js und sein neues Projekt
- ↑ Welcome to the libuv documentation — libuv documentation. Abgerufen am 24. Mai 2020.
- ↑ Getting CommonJS ( vom 21. Februar 2014 im Internet Archive) (englisch).
- ↑ npmjs.com npmjs.com npm registry
- ↑ Module in Node.js ( vom 4. Juli 2018 im Internet Archive)
- ↑ heise.de: Build-System größter Fehler von Node.js
- ↑ Entwickler.de: Ann-Cathrin Klose: Node.js ist der De-facto-Standard in Sachen serverseitigem JavaScript. Neben Node konnten sich wenig Alternativen am Markt etablieren – jetzt hat Ryan Dahl, Erfinder von Node, mit Deno einen neuen Anlauf gestartet. Seine Präsentation wirft Fragen auf.
- ↑ Node.js gains a new fork, much to Joyent’s dismay, infoworld.com, abgerufen am 5. Dezember 2014.
- ↑ io.js – JsWiki.de ( vom 18. März 2016 im Internet Archive)
- ↑ Golo Roden: Hoffnung für Node.js-Community: io.js 1.0 planmäßig veröffentlicht. In: Heise online. 14. Januar 2015, abgerufen am 10. März 2016.
- ↑ Node.js and io.js leaders are building an open, neutral Node.js Foundation to support the future of the platform. nodejs.org, 15. Mai 2015, abgerufen am 17. Juni 2015.
- ↑ io.js Week of May 15th (io.js decides to join the Node Foundation). medium.com, 15. Mai 2015, abgerufen am 29. Juli 2022.
- ↑ Node.js Foundation: Node v4.0.0 (Stable). 8. September 2015, abgerufen am 9. September 2015 (englisch).
- ↑ a b c d e f g h i j Übersicht der Node.js-Versionen auf GitHub. Abgerufen am 1. Mai 2023.
- ↑ Node 8 reschedule. Abgerufen am 22. Januar 2019.
- ↑ Bringing forward the End-of-Life Date for Node.js 16. Abgerufen am 13. März 2023.
- ↑ Wie Etherpad Lite entstand
- ↑ EtherPad ( des vom 12. Oktober 2013 im Internet Archive) Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.
- ↑ PDFKit: PDF-Dokumente generieren mit JavaScript auf golem.de
- ↑ Introducing HP webOS 2.1 ( vom 19. März 2011 im Internet Archive) (englisch).
- ↑ StackVM: Virtuelle Maschinen für die Mitbenutzung auf golem.de
- ↑ browserling.com
- ↑ NodeBB.org
- ↑ NodeBB – das Node.js Forum ( des vom 9. November 2013 im Internet Archive) Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.
- ↑ Ghost – Just a blogging platform, ein CMS,
- ↑ Ghost CMS: Endlich ist es da! ( vom 19. Dezember 2013 im Internet Archive)
- ↑ Projects, Applications, and Companies Using Node. In: nodejs/node-v0.x-archive. GitHub, 25. März 2016, abgerufen am 29. Dezember 2016 (englisch).
- ↑ Andrea Müller: Oscon: Open Source Awards verliehen. In: Heise online. 29. Juli 2011, abgerufen am 10. März 2016.
- ↑ Bossie Awards 2011: The best open source application development software. InfoWorld’s Test Center picks the best open source development tools of 2011 ( vom 29. Juli 2014 im Internet Archive) (englisch).