Node.js - Das Praxisbuch

Node.js - Das Praxisbuch

von: Sebastian Springer

Rheinwerk Computing, 2016

ISBN: 9783836240055

Sprache: Deutsch

560 Seiten, Download: 6564 KB

 
Format:  EPUB

geeignet für: geeignet für alle DRM-fähigen eReader geeignet für alle DRM-fähigen eReader Apple iPad, Android Tablet PC's Apple iPod touch, iPhone und Android Smartphones


 

eBook anfordern

Mehr zum Inhalt

Node.js - Das Praxisbuch



1Grundlagen


Aller Anfang ist schwer.
– Ovid

Mehr Dynamik in Webseiten zu bringen, das war die ursprüngliche Idee hinter JavaScript. Die Scriptsprache sollte die Schwachstellen von HTML ausgleichen, wenn es darum ging, auf Benutzereingaben zu reagieren. Die Geschichte von JavaScript geht zurück auf das Jahr 1995, wo es unter dem Codenamen Mocha von Brendan Eich, einem Entwickler von Netscape, entwickelt wurde. Eine der bemerkenswertesten Tatsachen über JavaScript ist, dass der erste Prototyp dieser erfolgreichen und weltweit verbreiteten Sprache in nur 10 Tagen entwickelt wurde. Noch im Jahr der Entstehung wurde Mocha in LiveScript und schließlich in einer Kooperation zwischen Netscape und Sun in JavaScript umbenannt. Dies diente vor allem dem Marketing, da zu diesem Zeitpunkt davon ausgegangen wurde, dass sich Java als führende Sprache in der clientseitigen Webentwicklung durchsetzen würde.

Vom Erfolg von JavaScript überzeugt, integrierte auch Microsoft 1996 eine Scriptsprache in den Internet Explorer 3. Das war die Geburtsstunde von JScript, welches größtenteils kompatibel mit JavaScript war, allerdings um weitere Features ergänzt wurde.

Das gegenseitige Wetteifern der beiden Unternehmen ist heute bekannt als die Browserkriege. Die Entwicklung sorgte dafür, dass die beiden JavaScript-Engines sowohl im Featureumfang als auch in der Performance stetig verbessert wurden, was zu einem Großteil für den heutigen Erfolg von JavaScript verantwortlich ist.

Im Jahr 1997 entstand der erste Entwurf des Sprachstandards bei der ECMA International. Unter der kryptischen Bezeichnung ECMA-262 beziehungsweise ISO/IEC 16262 ist der gesamte Sprachkern der Scriptsprache festgehalten. Den aktuellen Standard finden Sie unter www.ecma-international.org/publications/standards/Ecma-262.htm. Die Hersteller der verschiedenen JavaScript-Engines implementieren die ältere Version 5 des Standards nahezu vollständig und integrieren auch bereits zahlreiche Features des aktuellen Standards. Der Erfolg von JavaScript lässt sich auch gut grafisch darstellen. So ist JavaScript in den Sprachtrends von Github seit dem Jahr 2008 immer auf den vorderen beiden Plätzen zu finden.

Abbildung 1.1Topsprachen in Github

Node.js basiert auf dieser erfolgreichen Scriptsprache und hat selbst einen kometenhaften Aufstieg hingelegt. Dieses Kapitel soll Ihnen als Einführung in die Welt von Node.js dienen und Ihnen einen ersten Eindruck vermitteln, wo Sie die Plattform einsetzen können. Im ersten Schritt erfahren Sie zunächst einmal mehr über die Entwicklungsgeschichte von Node.js.

1.1Die Geschichte von Node.js


Damit Sie besser verstehen, was Node.js ist, und auch besser nachvollziehen können, wie es zu manchen Entscheidungen bei der Entwicklung gekommen ist, erfahren Sie hier etwas mehr über die Geschichte der Plattform.

1.1.1Die Ursprünge


Node.js wurde ursprünglich von Ryan Dahl entwickelt, einem Doktoranden der Mathematik, der sich eines Besseren besann, seine Bemühungen abbrach und stattdessen lieber mit einem One-Way-Ticket und nur sehr wenig Geld in der Tasche nach Südamerika reiste, wo er sich mit Englischunterricht über Wasser hielt. In dieser Zeit kam er sowohl mit PHP als auch mit Ruby in Berührung und entdeckte darüber seine Liebe zur Webentwicklung. Das Problem bei der Arbeit mit dem Ruby-Framework Rails war, dass es nicht ohne Workarounds möglich war, mit konkurrierenden Anfragen umzugehen. Die Applikationen waren zu langsam und lasteten die CPU vollständig aus. Eine Lösung für seine Probleme fand Ryan Dahl in Mongrel. Dabei handelt es sich um einen Webserver für Applikationen, die auf Ruby basieren.

Im Gegensatz zu klassischen Webservern reagiert Mongrel auf Anfragen von Nutzern und generiert die Antworten dynamisch, wo sonst lediglich statische HTML-Seiten ausgeliefert werden.

Die Aufgabe, die eigentlich zur Entstehung von Node.js führte, ist vom heutigen Standpunkt aus betrachtet recht trivial. Im Jahr 2005 suchte Ryan Dahl nach einer eleganten Möglichkeit, einen Fortschrittsbalken für Dateiuploads zu implementieren. Mit den damals verfügbaren Technologien waren nur unbefriedigende Lösungen möglich. Zur Übertragung der Dateien wurde für relativ kleine Dateien das HTTP-Protokoll und für größere Dateien das FTP-Protokoll genutzt. Der Status des Uploads wurde mithilfe von Long Polling abgefragt. Das ist eine Technik, bei der der Client langlebige Requests an den Server sendet und dieser den offenen Kanal für Rückantworten nutzt. Ein erster Versuch von Ryan Dahl zur Umsetzung einer Progressbar fand in Mongrel statt. Nach dem Absenden der Datei an den Server prüfte er mithilfe einer Vielzahl von Ajax-Requests den Status des Uploads und stellte diesen in einer Progressbar grafisch dar. Störend an dieser Umsetzung waren allerdings der damalige Single-Threaded-Ansatz von Ruby und die große Anzahl an Requests, die benötigt wurden.

Einen weiteren vielversprechenden Ansatz bot eine Umsetzung in C. Hier war Ryan Dahl nicht auf einen Thread begrenzt. C als Programmiersprache für das Web hat allerdings einen entscheidenden Nachteil: Es lassen sich recht wenige Entwickler für dieses Einsatzgebiet begeistern. Mit diesem Problem sah sich auch Ryan Dahl konfrontiert und verwarf auch diesen Ansatz nach kurzer Zeit wieder.

Die Suche nach einer geeigneten Programmiersprache zur Lösung seines Problems ging weiter und führte ihn zu funktionalen Programmiersprachen wie Haskell. Der Ansatz von Haskell baut auf Nonblocking I/O auf, das heißt also, dass sämtliche Schreib- und Leseoperationen asynchron stattfinden und die Programmausführung nicht blockieren. Dadurch kann die Sprache im Kern single-threaded bleiben, und es ergeben sich nicht die Probleme, die durch parallele Programmierung entstehen. Es müssen unter anderem keine Ressourcen synchronisiert werden, und es treten auch keine Problemstellungen auf, die durch die Laufzeit paralleler Threads verursacht werden. Ryan Dahl war aber auch mit dieser Lösung noch nicht vollends zufrieden und suchte nach weiteren Optionen.

1.1.2Die Geburt von Node.js


Die endgültige Lösung fand Ryan Dahl dann schließlich im Januar 2009 mit JavaScript. Hier wurde ihm klar, dass diese Scriptsprache sämtliche seiner Anforderungen erfüllen könnte. JavaScript war bereits seit Jahren im Web etabliert, es gab leistungsstarke Engines und eine große Zahl von Programmierern. Und so begann er Anfang 2009 mit der Arbeit an seiner Umsetzung für serverseitiges JavaScript, die Geburtsstunde von Node.js. Ein weiterer Grund, der für die Umsetzung der Lösung in JavaScript sprach, war nach Meinung von Ryan Dahl die Tatsache, dass die Entwickler von JavaScript dieses Einsatzgebiet nicht vorsahen. Es existierte zu dieser Zeit noch kein nativer Webserver in JavaScript, es konnte nicht mit Dateien in einem Dateisystem umgegangen werden, und es gab keine Implementierung von Sockets zur Kommunikation mit anderen Anwendungen oder Systemen. All diese Punkte sprechen für JavaScript als Grundlage für eine Plattform für interaktive Webapplikationen, da noch keine Festlegungen in diesem Bereich getroffen und demzufolge auch noch keine Fehler begangen wurden. Auch die Architektur von JavaScript spricht für eine derartige Umsetzung. Der Ansatz der Top-Level-Functions, also Funktionen, die mit keinem Objekt verknüpft und daher frei verfügbar sind und zudem Variablen zugeordnet werden können, bietet eine hohe Flexibilität in der Entwicklung.

Ryan Dahl wählte also neben der JavaScript-Engine, die für die Interpretation des JavaScript-Quellcodes verantwortlich ist, noch weitere Bibliotheken aus und fügte sie in einer Plattform zusammen.

Bereits im September 2009 begann Isaac Schlüter seine Arbeit an einem Paketmanager für Node.js, dem Node Package Manager, auch bekannt als NPM.

1.1.3Der Durchbruch von Node.js


Nachdem Ryan Dahl sämtliche Komponenten integriert hatte und erste lauffähige Beispiele auf der neuen Node.js-Plattform erstellt waren, benötigte er eine Möglichkeit, Node.js der Öffentlichkeit vorzustellen. Dies wurde auch nötig, da seine finanziellen Mittel durch die Entwicklung an Node.js beträchtlich schrumpften und er, falls er keine Sponsoren finden sollte, die Arbeit an Node.js hätte einstellen müssen. Als Präsentationsplattform wählte er die JavaScript-Konferenz jsconf.eu im November 2009 in Berlin. Ryan Dahl setzte alles auf eine Karte. Würde die Präsentation ein Erfolg und fände er dadurch Sponsoren, die seine Arbeit an Node.js unterstützten, könnte er sein Engagement fortsetzen, falls nicht, wäre die Arbeit von fast einem Jahr umsonst. In einem mitreißenden Vortrag stellte er Node.js dem Publikum vor und demonstrierte, wie man mit nur wenigen Zeilen JavaScript-Code einen voll funktionsfähigen Webserver erstellen kann. Als weiteres Beispiel brachte er eine Implementierung eines IRC-Chat-Servers mit. Der Quellcode dieser Demonstration umfasste etwa 400 Zeilen. Anhand dieses Beispiels demonstrierte er die Architektur und damit die Stärken von Node.js und machte es gleichzeitig für die Zuschauer greifbar. Die Aufzeichnung dieses Vortrags finden Sie unter www.youtube.com/watch?v=EeYvFl7li9E. Die Präsentation verfehlte ihr Ziel nicht und führte dazu, dass Joyent als Sponsor für Node.js einstieg. Joyent ist...

Kategorien

Service

Info/Kontakt