Få Javascript hele vejen på webserveren med Node.js og MongoDB

Med Node.js på webserveren kan man bruge Javascript til hele stakken, i stedet for at bruge SQL og XML. Det gør alting dejligt simpelt, og samtidigt lynhurtigt, forklarer webudvikler.

Efter mange års trofast indsats i browseren er Javascript nu også ved at blive et stort hit på serversiden. Ved hjælp af open source-værktøjet Node.js kan man håndtere store mængder brugere med få linjers Javascript.

Men perspektiverne stopper ikke her. Faktisk kan hele teknologistakken på webserveren skifte til Javascript og JSON, forklarer Allan Ebdrup, blogger på Version2 og passioneret webudvikler.

»Du kan simplificere dit query-lag. Ved at bruge en NoSQL-database som MongoDB, der kan bruge Javascript i stedet for SQL, og få data ud i JSON-formatet, har du Javascript i hele teknologistakken, ingen andre programmeringssprog, og der er ikke brug for en ORM (object-relational mapping, red.),« forklarer han begejstret.

Det giver en dejlig simpel arkitektur, og samtidigt kan alle browsere parse JSON meget hurtigt.

»Når du kombinerer på den måde, bliver det enormt spændende. Du kan simplificere din arkitektur meget, undgår mange forskellige sprog og slipper for mapping. Og så har du en heftig teknologistak, der er open source og gratis,« siger Allan Ebdrup.

Én tråd til tusindvis af brugere

Node.js er bygget på Googles hurtige Javascript-motor V8 og gør det muligt at bruge Javascript-koden fra browseren på webserveren. Fordi opgaverne bliver løst i én tråd pr. processor-kerne, i stedet for en tråd for hver bruger, er teknologien virkelig effektiv til websider med mange samtidige besøgende.

Læs mere om trådning og Node.js: Webudvikler begejstret for Node.js: Lynhurtig Javascript på serveren

Samtidigt er resurseforbruget i bund, fordi Node.js bruger såkaldt non-blocking I/O, hvor én tråd kværner alle opgaverne igennem, efterhånden som de dukker op. Med traditionelle web-applikationer vil en tråd stå og vente på, at en opgave eller et kald til databasen er afsluttet, før den er klar til næste bid.

Ulempen er dog, at man med Node.js selv skal 'hente svarene hjem' med call-back.

»Hver eneste gang, du har noget I/O, bliver du nødt til at specificere et call-back og have en funktion, der kører videre derfra. Det er en af svaghederne, rent vedligeholdelsesmæssigt. Det kan godt være lidt svært at holde styr på alle de call-backs, så det brokker folk sig lidt over,« siger Allan Ebdrup.

Unik historisk situation

Fordelene ved at bruge Node.js opvejer dog langt ulemperne.
Alene det, at man nu kan samle alt på ét sprog, er banebrydende, mener webudvikleren.

»Det er en helt unik historisk situation. Javascript findes på alle platforme, i en stort set 100 procent identisk implementation. Det kører på tablets, telefoner, Linux, Mac og Windows, og den udbredelse har ingen andre programmeringssprog,« siger han.

Samtidigt er der et enormt udvalg af Javascript-biblioteker til rådighed.

»Folk er gået helt amok i Javascript-libraries, så dem kan man fodre svin med, og de er alle skrevet med non-blocking I/O og callbacks, for en browser har kun én tråd. Det betyder, at man har en kæmpe kodebase, man kan bruge af, og det er også med til at gøre Node.js rigtigt spændende,« siger Allan Ebdrup.

Når man kan bruge samme sprog på serveren som i browseren, giver det også mulighed for at lade serveren overtage nogle opgaver, hvis der er problemer med folks browsere.

Nogle få procent har for eksempel slået Javascript fra i browseren, og så kan de brugere få serveret Javascript-indholdet på siden fra serversiden, forklarer Allan Ebdrup.

Perfekt til iværksætteren
Node.js er dog kun i version 0.4 og er ikke fri for børnesygdomme endnu, så Allan Ebdrup har foreløbigt kun brugt teknologien til eksperimenter i fritiden, ikke i produktion hos Multidata, hvor han er it-arkitekt.

Men skal man i gang fra bunden med et helt nyt projekt, vil han gerne anbefale at springe på Javascript-bølgen.

»Hvis man er iværksætter og skal have en prototype til at fungere hurtigt, samtidigt med at den skal kunne skalere voldsomt, er Node.js og MongoDB perfekt. Men man skal kunne lide Javascript,«
siger Allan Ebdrup.

Det vil også gøre det nemt at finde udviklere, fordi så mange gennem årene har arbejdet med Javascript på klientsiden. Udbredelsen har dog også været med til at sværte Javascript-sprogets omdømme, mener han.

»Man kan alt muligt i Javascript, men derfor skal man også have stringente regler for, hvordan man vil administrere det. Der er mange amatører, der har brugt Javascript, og det har givet sproget et dårligt ry,« siger han og drager en parallel til VBA, som bliver brugt på ikke særligt kønne måder i Excel.

Det er nemt at lave dårlig kode i Javascript, men bestemt også muligt at lave det modsatte, mener han og glæder sig over, at man fremover vil kunne komme langt alene med Javascript-kode.

»Det er kun begyndelsen, vi ser nu med Node.js, hvor alting samler sig om Javascript. Nogle synes, det er ufatteligt smukt at have Javascript overalt. Andre synes, at det er tragisk, at det lige blev Javascript,« siger han.

Tips og korrekturforslag til denne historie sendes til tip@version2.dk
Kommentarer (7)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
Michael Mortensen

Dejlig lidenskabelig/engageret artikel, hvor jeg selv øjner en mulighed for server-side JS-afvikling for klienten. Professionelt - såvel som personligt - er jeg dog ikke klar til at udskifte teknologistakken til kun at omfatte JS, men det er måske bare et spørgsmål om tid :-)

Læs evt. mere her på StackOverflow.com (en af mine favoritter): http://stackoverflow.com/questions/1476967/pros-and-cons-of-serverside-j...

Og tak for øjenåbneren, hr. Ebdrup!

  • 0
  • 0
Mads Jensen

Jeg ser ikke bare muligheder i, at kunne 'hjælpe' browsere med at eksekvere javascript, men også at kunne sende CPU/memory intensive opgaver til klienten og derved spare server ressourcer. Med den samme kode på både klient og server, så mindre enheder (f.eks. mobile) får deres data bearbejdet på serveren, mens mere kraftfulde enheder får det rå data til egen bearbejdning.

Yderligere er der store fordele i forbindelse med templating ved brug af nodejs. Ved at installere en DOM på serveren, kan man bruge samme selectors som normalt i browseren til at manipulere DOM træet server-side.

  • 0
  • 0
Steen Larsen

Jeg husker fra ca. år 2000 at man allerede dengang kunne bruge JS både i browseren og i Microsoft's .asp filer på serveren. (Sikkert IIS 4.0 og MS Visual Studio, i .asp filerne kune man vælge mellem VB og JS)

Derfor er node.js selvfølgelig alletiders alligevel! ;-)

Mvh Steen

  • 0
  • 0
Frank Olesen

jeg har lavet en meget specifik http server og en http client i Node.js - Clienten hentede data fra en apache server + mysql (kunne ikke anvende mongoda eller lign) og smed dem i nogle arrays i Node (4 gange i sekundet). Http serveren svarede udfra nogle bestemte Querstring parametre (filtrede og returnerede arrays). http serveren returnerede JSON og kunne håndtere mere end 6000 requests (a ca. 1-5 kb) i sekundet målt i ab, og cpu belastningen var ca 15-25% på en ubuntu linux (32 bit), 2ghz m 3 GB ram. Så ja, det er MEGET hurtigt, selv i min hjemmebryggede version.

Desværre var Node.js lidt ustabil(det skulle køre på 4 lokationer) og de 2 kunne jeg simpelthen ikke få til at køre stabilt nok til driftsbrug.

  • 0
  • 0
Allan Ebdrup Blogger

Yderligere er der store fordele i forbindelse med templating ved brug af nodejs. Ved at installere en DOM på serveren, kan man bruge samme selectors som normalt i browseren til at manipulere DOM træet server-side.

Der er en rimeligt skør gut fra Yahoo, der har eksperimenteret med at lave nogle a YUI's Javascript Widgets, så de kører med samme JavaScript kode, men hvis brugeren har slået JavaScript fra, køres koden på serveren via Node.js. Se ajaxian omtale det her: http://ajaxian.com/archives/progressive-enhancement-using-nothing-but-ja...

  • 0
  • 0
Dennis Nielsen

Det er rart at der er nogen der tænker uden for boksen og finder på noget genialt. Ikke at http serveren er noget skidt men det er altså ved at være et stort tungt maskineri at drive.

Glæder mig til at se fremtiden for Node.JS og hvad de kommercielle kræfter byder ind med. Jeg tror det bliver stort.

  • 0
  • 0
Allan Ebdrup Blogger

Glæder mig til at se fremtiden for Node.JS og hvad de kommercielle kræfter byder ind med. Jeg tror det bliver stort.

Ja, gad vide hvor længe de kan leve med at man kan få en simpel, gratis open source teknologistak, der performer mange gange bedre end det de har på hylderne?

  • 0
  • 0
Log ind eller Opret konto for at kommentere