Introductie van Node.JS

Node.JS is een softwareplatform voor het maken van (web)applicaties die snel werken en makkelijk uit te breiden zijn. Het softwareplatform is ontwikkeld door Ryan Dahl vanaf 2009. Hij had als doel dat push notificaties, zoals veel gebruikt bij mobiele apparaten, ook op websites makkelijk geïmplementeerd konden worden. Node is gebouwd op de V8 Javascript Engine. V8 is geschreven in C++ en is bedoeld voor applicaties in de browser en voor standalone applicaties. Voorbeelden van applicaties gebouwd op V8 zijn de browsers Chrome en Chromium. De Javascript Engine compileert Javascript naar machine code voordat de code wordt uitgevoerd. De V8 Javascript Engine is een open source project van Google.

Event-geori├źnteerd programmeren

In PHP, maar ook andere talen zoals ASP.NET en JAVA wordt code sequentieel uitgevoerd. Elke regel code wordt pas uitgevoerd als de regel code daarboven is voltooid.

Ook in Node wordt de code sequentieel uitgevoerd. Toch bestaat er een mogelijkheid om dit principe te doorbreken met hulp van callbacks. De code binnen deze callback functie wordt pas uitgevoerd wanneer het programma daar voor klaar is. Bijvoorbeeld als een resource is geladen of een zware operatie is voltooid. Bij Node is het dus mogelijk om sequentieel code te schrijven zonder dat code andere code blokkeert.

De callback functie wordt toegevoegd aan de event-loop van het programma. Dit is een loop die wordt uitgevoerd op het moment dat het programma niets aan het doen is. Tijdens deze loop wordt er elke keer gecontroleerd of de callback functie al uitgevoerd kan worden.

The event loop

Node is single-threaded, dit betekent dat er geen code parallel wordt uitgevoerd. Bij een single-threaded omgeving worden processen sequentieel uitgevoerd. Een zwaar proces kan er bij een single-threaded omgeving voor zorgen dat de hele server wordt geblokkeerd.

Node behandelt aanvragen niet sequentieel maar event gestuurd, terwijl het wel single-threaded is. Dit wordt in de literatuur vaak asynchroon genoemd. Dit gedrag zorgt ervoor dat processen elkaar niet in de weg zitten. Een zwaar proces kan er dus niet voor zorgen dat de hele server wordt geblokkeerd. De asynchrone code wordt aangestuurd door de event loop.

De Node omgeving voert continu de event loop uit. Het programma dat gestart wordt, wordt als een event behandeld en uitgevoerd. Dit programma zorgt ervoor dat de queue van de event loop verder gevuld wordt. Op enig moment voert Node of de event loop uit, of een taak zoals die op de queue van de event loop stond. Dit is dus volledig sequentieel, maar voelt voor de gebruiker asynchroon.

Een voordeel van de event loop is dat de eindgebruiker vrijwel nooit op een resultaat hoeft te wachten. De gebruiker stuurt een request naar de Node server, de server voegt de uit te voeren code toe aan de queue van de event loop en de server geeft een response.