Vad är Node.js?

20 mars 2021

Tags
nodejs javascript

Några ord om server-side JavaScript, dvs Node.js?

Node.js har på mindre än ett decennium fullständigt ändrat perceptionen av JavaScript och vad språket kan användas för. Plattformen har klart kommit att starkt utmana Java som primär platform för applikationsutveckling.

Det tekniska skälet är att Node på ett mycket effektivt sätt bygger på asynkron exekvering. Varje gång ett Node program utför en operation som involverar någon form av väntan (blocking call), såsom att skriva ut en text till terminalen eller en fil, eller för den delen läsa något från en TCP socket, så registrerar man först en funktion (call-back), som ska anropas när operationen är klar.

Det här kallas för continuation-modellen och innebär att programmet fortsätter sin exekvering i den call-back funktion som registrerats. Görs det sen ett nytt blocking call anrop, så registreras ytterligare en continuation function, vilken driver exekveringen vidare efter att operationen genomförts.

Tekniskt sett är detta extremt effektivt, eftersom det utnyttjar CPU:n på ett optimalt sätt. Mänskligt sätt, å andra sidan, lämnar det en del övrigt att önska, eftersom dylika program består av nästlade funktioner inuti nästlade funktioner.

Man brukar kalla detta för bumerang-effekten, eftersom med kod-indentering så förskjuts koden mer och mer år höger och på håll liknar en bumerang. Mer frispråkiga personer brukar benämna det rätt och slätt som call-back hell.

Med tiden så har det utvecklats nya språkstöd och idiom för att på ett bättre sätt implementera dylika program. Så, när man idag skriver Node.js program bygger de på promises och async functions.

Vad som tidigare var komplext att skriva, blev hur enkelt som helst med hjälp av async funktioner, vilka anropar promise returnerande funktioner. I förra veckans nyhetsbrev, skrev jag om Firebase och att:

All data om kurser, datum med mera finns i Firestore och bakgrundsuppgifter hanteras av Node.js script som exekveras på Firebase Cloud Functions. Exempel på en bakgrundsuppgift är när du anmäler dig till en kurs.

Registreringsoperationen är en Node.js async function, som anropar promise returnerande funktioner i Firebase biblioteket, genom att skriva await framför anropet. Användningen av await är centralt för detta och innebär att den asynkrona hanteringen sköts i bakgrunden utan att man behöver störa kod-flödet med nästlade continuation-funktioner. Tekniskt sett, realiseras async/await med co-routines, vilket emellertid får beskrivas i en annan krönika.

Väl mött på kurs (via Zoom) hos Ribomation och ta en extra titt på vår kurs om Node.js.