Die event-basierte Programmierumgebung für das Realtime Web
node.js ist eine neue und recht neuartige Laufzeitumgebung für JavaScript-Programme, dass das asynchrone Programmieren in den Vordergrund stellt, um eine hohe Performance zu erreichen. Im Gespräch mit Tim Pritlove berichtet Felix Geisendörfer von Hintergrund, Eigenschaften und Anwendungsmöglichkeiten von node.js.
Themen: aktuelle Probleme bei Webanwendungen; Long polling und File Upload; Asynchroner I/O; Latenzen und Performance-Bottlenecks; Vor- und Nachteile eventbasierter Programmierung; Threads und Thread Safety; node.js Architektur und Komponenten; Warten im Netz; Vom Umgang mit vielen gleichzeitigen Verbindungen; Serverseitiges Web Browsing; Anwendungsverteilung zwischen Client und Server; Asynchrones Rendering von Templates; Asynchrone Kommunikation mit Datenbanken; Debugging; Node Package Manager; Module und Addons; nodeJS auf Embedded-Systemen.
Shownotes
Links:
- Felix Geisendörfer
- Felix Geisendörfer @ Twitter
- WP: Commodore 64
- WP: Visual Basic
- WP: Perl
- WP: PHP
- WP: CakePHP
- CRE146 JavaScript
- WP: node.js
- node.js Overview
- WP: Active record pattern
- WP: Ruby on Rails
- CRE163 Ruby und Rails
- WP: Push technology (Long polling)
- WP: Adobe Flash
- WP: JavaScript
- WP: Java Virtual Machine
- WP: Netscape Communications
- WP: Server-side JavaScript
- WP: Document Object Model
- WP: Type system
- WP: Python
- WP: FastCGI
- WP: Hallo-Welt-Programm
- WP: Asynchronous I/O
- WP: Slashdot effect
- WP: Denial of Service
- WP: Festplattenlaufwerk
- WP: Random-Access Memory
- WP: Ereignisschleife (Event Loop)
- WP: Solaris
- WP: Thread
- WP: Threadsicherheit
- WP: Koroutine
- WP: Principle of Least Surprise
- WP: Go
- WP: Mehrkernprozessor
- CRE082 Erlang
- WP: BitTorrent
- libeio
- libev
- WP: memcached
- WP: V8
- WP: SpiderMonkey
- WP: Rhino
- WP: Garbage Collection
- WP: nginx
- WP: Socket
- WP: Sleep
- WP: Ajax
- WP: Hypertext Transfer Protocol
- WP: WebSockets
- WP: Browserspiel
- WP: OpenGL
- jQuery
- sizzle
- WP: HTML5
- WP: Boyer-Moore-Algorithmus
- How To Node – the zen of coding in nodeJS
- plurk
- wheat – blog engine for coders written in node.JS
- WP: Palm
- Palm webOS
- WP: Debugger
- WP: Testgetriebene Entwicklung
- WP: Klasse
- WP: Methode
- WP: Race Condition
- WP: MySQL
- MySQL Internals ClientServer Protocol: Client Authentication Packet
- NoSQL
- WP: CouchDB
- WP: MongoDB
- WP: Redis
- WP: Extensible Markup Language (XML)
- WP: libxml2
- Introduction to npm
- WP: Arduino-Plattform
- Transloadit
Vielen Dank für eine weitere interessante Folge CRE!
Ich bewundere ja immer auch deine ausführlichen Linklisten in den Shownotes. Aber fehlt da nicht noch was wichtiges?
Es ist ja ok, dass du die Intros immer son bischen mysteriös für sich stehen lässt :-) Ich hab mir nur bei der Intro-Musik diesmal die Mühe gemacht, und durch kurzes Googeln rausgefunden, dass die Musik unter CC-Lizenz veröffentlicht ist. Was ich auch nicht anders erwartet habe.
Wo bleibt denn da die laut CC erforderliche Namensnennung?
Nette Folge, dachte eigentlicht etwas über ein weiteres JS-Framework zu erfahren, aber Server-JS ist auch mal ’n interessantes Thema.
Was mich ein bisschen wundert ist, dass ursprünglich keine DOM-Unterstützung existierte!? Das finde ich seltsam, denn… ich will nicht sagen „im Wesentlichen“ aber meistens generiert man mit Web-Servern ja irgendwie Websites in HTML oder XHTML oder sowas (klar, nicht nur…).
Da böte es sich imho super an, wenn ich ein DOM habe und bei reinkommenden Events eben irgendein Element in mein DOM hängen kann und wenn ich mit allem fertig bin serialisiere ich den Kram und schick’s dem Browser.
Wenn man das noch asynchron hinbekäme um so besser, aber was ich eben meine ist: Man baut Webseiten, Webseiten haben ein DOM, aber man baut kein DOM sondern Strings!? (Derzeit noch). Komisch :)
Die restlichen 30 Minuten höre ich dann, wenn ich von der Arbeit heim komme :)
Deus Figendi: schau dir mal YUI3 an.
Vielen Dank für den Podcast!
Eine Programmiersprache für IO zu verwenden, und sei es noch so asynchron, die nicht einmal das Konzept Byte, Integer oder gar Bytebuffer kennt halte ich für dumm.
Wer Crockfords „JavaScript – The Good Parts“ gelesen hat, der weiß, dass JavaScript zu 70% aus Bad und Ugly Parts besteht. JavaScript ist allenfalls eine „besser als erwartet“-Sprache, so wie Angela Merkel einst die „besser als erwartet“-Kanzlerin war.
Weshalb soll JavaScript „besonders gut für asynchrone Programmierung geeignet“ sein? Weil es Lambda-Funktionen hat, die man als Callbacks verwenden kann, so wie das eigentlich jede vernünftige Programmiersprache hat?
Danke für den Podcast! Ich beschäftige mich schon seit einigen Wochen mit node und endlich gibt es auch eine gute deutsche Ressource im vertrauten Format, das sich doch deutlich von den amerikanischen unterscheidet. Somit konnte ich vieles besser verstehen, was ich bisher nur angewendet oder nicht verstanden habe. Felix war dafür auch ein super Gesprächspartner.
Wow. Das war mal wieder ein genialer Podcast. Ich habe damals den JavaScript Podcast gehört und dachte, man müsste doch einen eigenen über node.js machen!
Node ist aus meiner Sicht neben den Objektorientierten Datenbanken eine der wichtigsten Webtechnologien der Zukunft. Wenn man als Datenbank CouchDB benutzt, muss man plötzlich nur noch Javascript programmieren um eine ganze Webapplikation zu schreiben, wer hätte das vor ein paar Jahren gedacht :-)
Ist da im Hintergrund ab und zu eine Katze am Schnurren, oder sind meine Kopfhörer/Ohren kaputt?
Weiß jemand wie der Outro-Song heißt?
Großartige Sendung über ein großartiges Thema (mit einem tollen Gast :)
Freu mich schon auf die nächsten Folgen.
… wow, klasse Folge! Großartig!! Hab richtig Lust auf node.js bekommen, obwohl ich eigentlich (bisher) nicht so der JavaScript-Fan bin. Danke! – Björn
Auch solaris hat kein aio{_read,read}-Support fuer normale Dateien. Dies wird ebenfalls ueber einen Userspace-Threadpool gehandhabt. Die Kernel-Implementierung supportet meines Wissens nach nur block-devices, ist im Gegensatz zu linux aber agnostisch bzgl. der API.
der Song am Schluss ist:
http://www.last.fm/music/YTCracker/_/View+Source
Der Podcast hört sich ganz gut, mir ist das Tempo etwas zu langsam. Inhaltlich: Node ist schon toll, gerade weil es die oft grossen Unterschiede zwischen Client und Server-Platform reduziert, aber zu behaupten, dass es keine andere Platform gibt, die non-blocking IO supported, ist so nun wirklich nicht richtig (Java NIO, IO:AIO für Perl, Boost AIO für C++, gibt sicher noch mehr) und select() kann man durchaus als Non-Blocking IO Methode gelten lassen, und viele C-Proggies nutzen das ja einfach direkt.
IMHO: einer der ersten Sprachen, die event-based programming (richtig) umgesetzt hat war wohl Tcl mit Tk. Einfach, das mal auch jemand wieder diese tolle Spache erwähnt hat ;-)
äh…Sprache.
Wenn ein PHP Entwickler über POSIX redet… FEHLINFORMATIONEN!!!
Natürlich können Linux, FreeBSD, usw. non-blocking IO; bei Dateien GENAUSO wie beim Netzwerk! Und Solaris kann hier gar nichts besser, ausser vieleicht dass ZFS derzeit performanter eingebunden ist.
Schonmal etwas von einem Filedecriptor gehört, der sowohl Dateien als auch Netzwerk, Geräte, usw. gleich behandelt? Insbesondere nach POSIX können alle Systeme mit select, tollerweise aber teilweise sogar noch viel schöner mit anderen Systemcalls (z.B. unter Linux mit epoll) mit vielen gleichzeitigen Filedescriptoren umgehen. Das skaliert auch mit richtig vielen gleichzeitigen Verbindungen und/oder offenen Dateien wunderbar.
http://linux.die.net/man/7/epoll
Ich bin noch nicht ganz durch, aber alles was ich so höre geht wesentlich schöner und einfacher mit POE: http://poe.perl.org/.
P.S.: Ich kann UNIX Network Programming von W. Richard Stevens empfehlen.
Pingback: Node.js | Paul Vorbach
Eine sehr gute Einführung zu node.js findet sich hier:
http://www.nodebeginner.org/ (Englisch)
Pingback: oreillyblog » Node.js: Blitzschnelles und stabiles JavaScript
Pingback: CRE176 Cloud Computing | CRE: Technik, Kultur, Gesellschaft
Ich habe in den letzten Wochen ein deutschsprachiges Portal rund um das Thema Node.js aufgebaut. Falls sich jemand näher für Node.js interessiert: http://nodecode.de/