Leestijd: 13 minuten
Behorend tot de meest populaire programmeertaal, is JavaScript ook een van de meest universele software-ontwikkelingstechnologieën. Traditioneel gebruikt als een web frontend ontwikkelingstool, is het ook een belangrijke cross-platform mobiele ontwikkelingstool geworden als een basistechnologie voor een groot aantal platforms, zoals Apache Cordova/PhoneGap, React Native, NativeScript, Appcelerator Titanium.
Maar de toepassingsgebieden voor JavaScript eindigen hier niet. De laatste tijd is er veel te doen geweest over het gebruik van JavaScript voor server-side programmeren. Een van de tools die deze verschuiving in webontwikkeling aangaf was Node.js.
- Wat is Node.js?
- De voordelen van Node.js
- ⊕ Robuuste technologiestack
- ⊕ Snelle verwerking en event-based model
- ⊕ Schaalbare technologie voor microservices
- ⊕Rijk ecosysteem
- ⊕ Sterke bedrijfsondersteuning
- ⊕ Naadloze JSON-ondersteuning
- De nadelen van Node.js
- Θ Prestatieknelpunten bij zware rekentaken
- Θ Callback hell issue
- Θ Onvolwassenheid van tooling
- Θ Groeiende vraag naar ervaren professionals
- Hoe Node.js te leren
- Node.js vs Ruby on Rails vs Django vs Symfony
- Make Node.js Shine
Wat is Node.js?
Node.js is eigenlijk geen framework of een bibliotheek, maar een runtime-omgeving, gebaseerd op Chrome’s V8 JavaScript-engine.
De technologie werd voor het eerst geïntroduceerd in 2009 door Ryan Dahl op de jaarlijkse Europese JSConf en werd onmiddellijk erkend als “het meest opwindende stukje software in het huidige JavaScript-universum”.
Als een open-source project werd Node.js gesponsord door Joyent, een aanbieder van cloud computing- en hosting-oplossingen. Het bedrijf investeerde in een aantal andere technologieën, zoals Ruby on Rails framework, en leverde hostingdiensten aan Twitter en LinkedIn. Laatstgenoemde werd ook een van de eerste bedrijven die Node.js gebruikte voor zijn backend van mobiele applicaties. De technologie werd later overgenomen door een aantal technologische leiders, zoals Uber, eBay, Walmart en Netflix, om er een paar te noemen.
Het was echter pas onlangs dat brede adoptie van server-side JavaScript met Node.js begon. De belangstelling voor deze technologie bereikte een hoogtepunt in 2017, volgens Google Trends, en blijft hoog.
Node.js downloads. Installeer hier Long-Term Support en de nieuwste versies van Node.js voor Windows en MacOS. Ook een herinnering – npm wordt out-of-the-box met Node.js gedistribueerd.
Documentatie. Vind de docs en getting started guides op de link.
Node.js IDEs . Bijna elke populaire code-editor heeft ondersteuning en plug-ins voor JavaScript en Node.js, dus het maakt alleen uit hoe u uw IDE aanpast aan uw coderingsbehoeften. Maar veel ontwikkelaars zijn vol lof over speciale tools van VS Code, Brackets, Atom, en WebStorm.
Frameworks. Het gebruik van middleware boven pure Node.js is een veel voorkomende praktijk die het leven van ontwikkelaars eenvoudiger maakt. We hebben een apart artikel waarin populaire Node.js frameworks worden vergeleken, waarin we kijken naar Express.js, Meteor, Sales.js, Koa.js, Keystone.js, en Loopback.js.
Voor meer JavaScript ecosysteem tools die worden gebruikt met Node.js, zie het speciale artikel.
Node.js sterktes en zwaktes maken het het onderwerp van een verhitte discussie. Om de zaken recht te zetten, hebben we beide geanalyseerd – Node.js voors en tegens – in een poging om erachter te komen welke projecten kunnen profiteren van deze technologie keuze. Dus, waarom Node.js gebruiken?
Een snelle uitleg van wat Node.js is (abonneer u als u meer video-inhoud wilt)
De voordelen van Node.js
⊕ Robuuste technologiestack
JavaScript heeft bewezen een onbetwiste leider te zijn onder de meest populaire programmeertalen. Node.js is op zijn beurt een op zichzelf staande naam in de industrie geworden. Met een totaal van 368.985.988 downloads en meer dan 750 nieuwe bijdragers zoals vermeld in Node-by-numbers rapport 2018, lijkt het project sterker dan ooit.
Het gebruik van Node.js voor backend, krijg je automatisch alle voordelen van full stack JavaScript-ontwikkeling, zoals:
- betere efficiëntie en algehele productiviteit van ontwikkelaars
- code delen en hergebruiken
- snelheid en prestaties
- gemakkelijke kennisdeling binnen een team
- een enorm aantal gratis tools
Dientengevolge is uw team een stuk flexibeler, kost de ontwikkeling minder tijd en krijgt u als resultaat snelle en betrouwbare software. Ontwikkelaars die zijn opgeleid in frontend JavaScript kunnen met minimale inspanning beginnen met het programmeren van de serverkant. Met dezelfde taal aan beide kanten, kun je code hergebruiken op de frontend en de backend door het in modules te verpakken en nieuwe abstractieniveaus te creëren.
In tegenstelling tot wat vaak wordt gedacht, ben je als full stack ontwikkelaar op geen enkele manier beperkt tot de traditionele MEAN (MongoDB, Express.js, AngularJS, en Node.js) stack. De enige must-have in dit geval is Node.js (er is geen alternatief in JavaScript voor backend programmeren). De rest van de technologieën binnen deze stack zijn optioneel en kunnen worden vervangen door enkele andere tools die vergelijkbare functionaliteit bieden (lees over de alternatieven in ons aparte artikel).
⊕ Snelle verwerking en event-based model
Node.js is snel; dat is geen mythe. Kijk maar eens naar de prestatietests van toptal.com, waarin wordt vergeleken hoe GO, PHP, Java en Node.js omgaan met gelijktijdige verzoeken. Er zijn een paar redenen waarom Node.js zulke resultaten laat zien:
V8 engine. De motor die in Node.js wordt gebruikt, is oorspronkelijk ontwikkeld voor de Chrome-browser. V8 van Chrome is geschreven in C++ en wordt gebruikt om functies die in JavaScript zijn geschreven te compileren in machinecode, en het doet het werk met een indrukwekkende snelheid. Kijk maar eens naar de prestatiebenchmarks op de blog van V8. Dankzij Google die zwaar investeert in zijn engine, laat V8 elk jaar prestatieverbeteringen zien, en Node.js haalt er de hele zak voordelen uit.
Non-blocking Input/Output en asynchrone request handling maakten Node.js in staat om requests te verwerken zonder enige vertraging. In de context van backend, synchrone verwerking gaat ervan uit dat code wordt uitgevoerd in een opeenvolging. Dus, elk verzoek blokkeert een draad, waardoor andere verzoeken wachten tot het klaar is. Asynchrone verwerking staat toe dat verzoeken worden verwerkt zonder de thread te blokkeren (non-blocking I/O). Dus nadat een verzoek is verwerkt, kan het een callback uitzetten en doorgaan met het serveren van verzoeken. Dat helpt Node.js om het maximale uit single threading te halen, wat resulteert in een korte responstijd en gelijktijdige verwerking.
Een ander aspect is het event-based model. Bij het gebruik van een gemeenschappelijke taal voor zowel client / server-side, synchronisatie gebeurt snel, wat vooral handig is voor event-based, real-time applicaties. Door zijn asynchrone, non-blocking, single-threaded aard, Node.js is een populaire keuze voor online gaming, chats, video conferenties, of elke oplossing die voortdurend bijgewerkte gegevens nodig.
De voorbeelden spreken voor zich: veel toonaangevende bedrijven schakelden technologie om naar ontwikkelde Node.js toepassingen en merkten aanzienlijke verbeteringen – PayPal, bijvoorbeeld, merkte een 35 procent afname in responstijd sinds de migratie van Java.
⊕ Schaalbare technologie voor microservices
Omdat het een lichtgewicht technologietool is, is het gebruik van Node.js voor microservices architectuur een geweldige keuze. Deze architectuurstijl wordt het best beschreven door Martin Fowler en James Lewis als “een aanpak voor het ontwikkelen van een enkele applicatie als een suite van kleine diensten, elk draaiend in zijn eigen proces en communicerend met lichtgewicht mechanismen, vaak een HTTP resource API.”
Door de applicatielogica op te splitsen in kleinere modules, microservices, in plaats van een enkele, grote monolithische kern te creëren, maak je een betere flexibiliteit mogelijk en leg je de basis voor verdere groei. Daardoor is het veel eenvoudiger om meer microservices bovenop de bestaande toe te voegen dan om extra functies te integreren met de basisfunctionaliteit van de app.
Monolithische architectuur vs microservice-architectuur in een notendop
Node.js is de technologie bij uitstek bij het bouwen en implementeren van microservices-ecosysteemoplossingen, volgens Node.js User Survey Report 2017. Ongeveer de helft van de respondenten maakt gebruik van microservice-gerelateerde technologieën (namelijk Docker, het toonaangevende containerisatieplatform voor software) om Node.js-webapps te bouwen:
Percentage ontwikkelaars dat Docker-containerisatie gebruikt met Node.js
Uit recentere bevindingen blijkt dat microservice-gerelateerde technologieën zoals Docker en Kubernetes in 2018 een groei in gebruik hebben doorgemaakt, aangezien deze architectuurstijl alleen maar populairder wordt. Met elke microservice die via streams rechtstreeks met de database communiceert, zorgt een dergelijke architectuur voor betere prestaties en snelheid van de applicatie. Een match made in heaven wordt ondersteund door twee frameworks die veel gebruikt worden voor microservice-architectuur. Het Express-framework noemt IBM en Uber onder zijn gebruikers, terwijl restify wordt gebruikt door npm en Netflix.
Als voorbeeld van live implementatie, Walmart’s overstap naar microservices architectuur met Node.js resulteerde in de volgende onmiddellijke voordelen:
- Overnacht 20 procent conversiegroei in het algemeen en 98 procent mobiele conversiegroei
- Honderd procent uptime op Black Friday (verwerking van meer dan 500 miljoen pageviews)
- Besparing tot 40 procent op hardware en 20-50 procent op algemene operaties
Een ander helder voorbeeld van hoe Node.js de concurrentie kan overtreffen in termen van prestaties is het geval van GoDaddy. Bij het uitvoeren van de SuperBowl advertentiecampagne kon het bedrijf 10.000 verzoeken per seconde verwerken zonder downtime, met slechts 10 procent van de hardware dankzij Node.js.
⊕Rijk ecosysteem
Een woord – npm, een standaard Node.js package manager, het dient ook als een marktplaats voor open source JavaScript-tools, die een belangrijke rol speelt bij de opmars van deze technologie. Met ongeveer 836.000 bibliotheken beschikbaar in het npm register op dit moment, en meer dan 10.000 nieuwe die elke week worden gepubliceerd, is het Node.js ecosysteem vrij rijk. Dezelfde statistieken wijzen erop dat 97 procent van de moderne webapplicaties bestaat uit npm-modules. En dat is het bewijs van zijn onbetwistbare populariteit onder ontwikkelaars.
Met zo’n grote verscheidenheid aan gratis tools toegankelijk in een paar klikken, is er een enorm potentieel voor het gebruik van Node.js. Tegelijkertijd geniet open source software een groeiende populariteit, omdat het de mogelijkheid biedt om nieuwe oplossingen te bouwen die de totale kosten van ontwikkeling en de tijd om op de markt te komen verminderen.
⊕ Sterke bedrijfsondersteuning
Zoals hierboven vermeld, werd de ontwikkeling van Node.js gesteund door Joyent. In 2015 werd de Node.js Foundation opgericht om “wijdverspreide adoptie mogelijk te maken en de ontwikkeling van Node.js te helpen versnellen.” IBM, Microsoft, PayPal, Fidelity en SAP werden de oprichtende leden van de organisatie.
De lijst van organisaties die Node.js in productie gebruiken, groeit voortdurend. Het omvat momenteel bijna driehonderd bekende bedrijven, zoals PayPal, Medium, Trello, Uber, en Zendesk.
Zeer weinig open source projecten hebben ooit zo’n sterke steun van ’s werelds toonaangevende bedrijven genoten. En dat voorspelt dat Node.js een uitstekend potentieel heeft.
⊕ Naadloze JSON-ondersteuning
Hoewel andere backend-technologieën zoals PHP en Ruby on Rails JSON-formaat kunnen gebruiken voor communicatie, doet Node.js dat zonder te converteren tussen binaire modellen en gebruikt JavaScript. Dit is vooral handig wanneer je RESTful API’s moet bouwen voor NoSQL database ondersteuning, zoals MongoDB – de letter M in de MEAN stack. Deze naadloze communicatie met een van de belangrijkste standaarden voor gegevensoverdracht is een ander voordeel van het JavaScript-ecosysteem.
De nadelen van Node.js
Θ Prestatieknelpunten bij zware rekentaken
Het grootste nadeel van Node.js is zelfs nu nog het onvermogen om CPU-gebonden taken te verwerken. Maar, om te begrijpen wat de wortels van dit probleem zijn, hebben we een beetje context nodig. Laten we beginnen met de basis, met JavaScript zelf.
Zoals we weten, is Node.js een runtime omgeving die JavaScript aan de server kant uitvoert. Omdat het een frontend programmeertaal is, gebruikt JavaScript een enkele thread om taken snel te verwerken. Threading is niet nodig om het te laten werken, omdat taken in JavaScript licht van gewicht zijn en weinig CPU vergen.
Terugkomend op Node.js, weten we nu waarom het als single threaded wordt beschouwd: Het verwerkt JavaScript, wat single threaded is. Een non-blocking input/output-model betekent dat Node.js de client-oproep beantwoordt om een verzoek te starten en de taak verwerkt gedurende de tijd dat het callback schiet, als de taak klaar is. Het asynchroon verwerken van taken, Node voert JS code uit op zijn enkele thread op een event basis. Dat is wat genoemd een event-loop.
Het probleem doet zich voor wanneer Node.js ontvangt een CPU gebonden taak: Telkens wanneer een zwaar verzoek komt naar de event-loop, zou Node.js alle beschikbare CPU zetten om het eerst te verwerken, en dan andere verzoeken in de wachtrij te beantwoorden. Dat resulteert in trage verwerking en algehele vertraging in de event loop, wat de reden is waarom Node.js niet wordt aanbevolen voor zware berekeningen.
Hoewel, in 2018, werd multithreading geïntroduceerd in Node.js als een experimentele functie met de 10.5.0-update. Een nieuwe functie genaamd worker threads module kan worden gebruikt om extra threads uit een thread pool te benutten, om CPU gebonden taken uit te voeren. Maar dat kan alleen op machines met meerdere cores, omdat Node.js nog steeds toestaat dat je één core gebruikt voor één thread. Dat betekent dat zware parallelle processen op een andere thread kunnen worden uitgevoerd. Deze functie blijft experimenteel in Node.js versie 12, maar is aanzienlijk verbeterd.
Θ Callback hell issue
Door zijn asynchrone aard leunt Node.js zwaar op callbacks, de functies die worden uitgevoerd nadat elke taak in de wachtrij is voltooid. Een aantal taken in de wachtrij op de achtergrond houden, elk met zijn callback, kan resulteren in de zogenaamde callback-hel, die een directe invloed heeft op de kwaliteit van de code. Simpel gezegd is het een “situatie waarin callbacks meerdere niveaus diep in andere callbacks zijn genest, waardoor het mogelijk moeilijk wordt om de code te begrijpen en te onderhouden.”
Voorbeeld van code met geneste callbacks
Image source: callbackhell.com
Dit wordt vaak gezien als een teken van slechte coderingsstandaarden en een gebrek aan ervaring met JavaScript en Node.js in het bijzonder. De code, hierboven weergegeven, kan worden gerefactored en vereenvoudigd, in slechts een paar stappen, zoals getoond op callbackhell.com.
Θ Onvolwassenheid van tooling
Hoewel de kern Node.js modules vrij stabiel zijn en als volwassen kunnen worden beschouwd, zijn er veel tools in de npm registry die ofwel van slechte kwaliteit zijn of niet goed gedocumenteerd/getest. Bovendien is de registry zelf niet goed genoeg gestructureerd om de tools aan te bieden op basis van hun rating of kwaliteit. Daarom kan het moeilijk zijn om de beste oplossing voor uw doeleinden te vinden zonder te weten waarnaar u moet zoeken.
Het feit dat de Node.js-ecosysteem grotendeels open source is, heeft ook zijn impact. Terwijl de kwaliteit van de kern Node.js-technologie wordt bewaakt door Joyent en andere grote bijdragers, kan de rest van de tools de kwaliteit en hoge coderingsnormen missen die door wereldwijde organisaties zijn vastgesteld.
Θ Groeiende vraag naar ervaren professionals
In tegenstelling tot wat vaak wordt gedacht, zijn niet alle JavaScript-ontwikkelaars ook Node.js-ontwikkelaars. Het beheersen van server-side JavaScript-programmering vereist een aanzienlijke hoeveelheid inspanning en een bepaalde achtergrond in backend-ontwikkeling. Vanwege zo’n steile leercurve is het aantal Node.js-engineers aanzienlijk lager dan het totale aantal JS-professionals.
Naarmate de hype rond Node.js blijft groeien, neemt de vraag naar ervaren professionals op dit gebied toe.
Er is een grote kenniskloof tussen ingenieursstudenten die aan hun baan beginnen en de behoeften van werkgevers
Bron: HackerRank
Dus, met miljoenen JavaScript-ontwikkelaars die er zijn, kan het moeilijk zijn om een ervaren Node.js-professional voor uw project te vinden. In dit geval wilt u uw zoektocht zeker niet beperken tot slechts één land. In het buitenland technisch talent vinden is al lang de norm in de IT-industrie.
Hoe Node.js te leren
Hier is uw startpakket voor het begrijpen van en werken met Node.js.
Turorials. Beperk je niet tot officiële docs: Bekijk tonnen gratis lessen op W3Schools, bezoek internationale workshops van Nodeschool, en natuurlijk, gebruik de bibliotheek met gratis tutorials van freeCodeCamp.
Klassen. Als je een toegewijde student bent, begin dan een online cursus over Node.js: Hier is er een op PluralSight, en natuurlijk een op Udemy.
Interactief leren. Bekijk gratis en betaalde bronnen waarmee je Node.js kunt leren met behulp van interactieve lessen en oefeningen. Een van de meest populaire is The Art of Node.
Community. Zie de officiële lijst van Node.js-projecten die door de gemeenschap worden geleid. Een snelle tip: Onderzoek Facebook groepen en gemeenschappen in uw gebied / eerste taal. En natuurlijk, raadpleeg de Node.js gemeenschappen op Reddit, een tag op StackOverflow, en het onderwerp op Quora.
Node.js vs Ruby on Rails vs Django vs Symfony
Er zijn niet veel technologieën die kunnen concurreren met de populariteit van Node.js of de marktvraag. Echter, als we kijken naar de alternatieven voor server-side programmeren, zien we ten minste drie meer stralende sterren aan de hemel. Het zijn Ruby on Rails, Django, en Symfony. Laten we eens kijken of ze de voordelen van Node.js kunnen evenaren en de nadelen ervan kunnen delen.
Vergelijking van Node.js, Rails, Django en Symfony stats
Bron: StackShare
Ruby on Rails staat bekend om zijn eenvoudige maar eigenzinnige taal en de beschikbaarheid van gems – Rails’ eigen ecosysteem van aangepaste pakketten. Ruby zelf is een intuïtieve en beginnersvriendelijke taal met een ondersteunende en toegewijde gemeenschap die code bijdraagt aan RubyGems. Rails werd gemaakt voor snelle ontwikkeling en prototyping, maar het is met succes gebruikt door merken als GitHub, Twitter, en Airbnb, het bewijzen van zijn brede waaier van use cases. De data migratie functionaliteit is bijzonder indrukwekkend – in tegenstelling tot Node.js, die extra pakketten gebruikt, Rails heeft al een functie waarmee u eenvoudig en consistent manipuleren van uw database.
Wanneer moet je Rails gebruiken boven Node.js? Rails kan niet concurreren met de prestaties en schaalbaarheid van Node, echter, Rails kan een betere keuze zijn voor snelle ontwikkeling. Node.js moet wel modules van derden gebruiken om die snelheid van ontwikkeling te bereiken, maar Ruby heeft het allemaal onconventioneel. Wat de taal betreft, heeft geen enkele tool een duidelijk voordeel – terwijl Node.js een hoge vraag heeft, maar een lage propositie, is de talentenpool van Ruby aanvankelijk kleiner.
Django is een webframework op Python, de snelst groeiende programmeertaal volgens de gegevens op StackOverflow. Op de markt gebracht als een tool voor perfectionisten met deadlines, is het gemaakt om applicaties zo snel mogelijk te maken en op de meest gestructureerde, veilige, en gemakkelijk te begrijpen manier. Django, samen met Python, wordt ook beschouwd als een mildere leercurve te hebben. Terwijl het werken met Node.js een uitgebreide kennis van JavaScript zal vereisen, is Django een “batterijen inbegrepen” technologie. Het heeft een ingebouwd admin panel om eenvoudig uw databases en templates bij te werken en te onderhouden om uw werk te versnellen.
Wanneer zou u Django moeten gebruiken boven Node.js? Vergeleken met Node.js, is Django een beginnersvriendelijke tool. Afgezien van de taal zelf, is er geen echte reden om de een boven de ander te verkiezen. Het is meer een vraag over uw comfort en ervaring met ofwel JavaScript of Python dan de specifieke use cases.
Symfony is een PHP-framework dat automatisch voorziet in 20 + jaar documentatie, en een enorme, actieve gemeenschap. Meer dan 80 procent van het web wordt aangedreven door PHP met projecten zoals Facebook, Baidu, of een andere website draait op WordPress. Hoewel Symfony slechts één van de PHP frameworks op de markt is, is het indrukwekkend stabiel, schaalbaar, en werkt het goed voor grootschalige projecten. Het maakt ook gebruik van een templating engine Twig die werkt zoals veel PHP-gebaseerde Content Management Systemen.
Wanneer zou je Symfony boven Node.js moeten gebruiken? Symfony ondersteunt natuurlijk CMS functies zoals templates en admin dashboards waardoor het blogs, nieuwssites en eCommerce winkels kan draaien. Enkele voorbeelden zijn Yahoo Answers, Dailymotion, en National Geographic.
Make Node.js Shine
Het is duidelijk dat met alle genoemde Node.js voor- en nadelen, de technologie geen wondermiddel is. Maar dat geldt ook voor Java, .Net framework of PHP. Toch zijn er specifieke gevallen waarin elk van de genoemde technologieën het beste presteren. Voor Node.js zijn dit real-time toepassingen met intense I/O, die snelheid en schaalbaarheid vereisen.
Dit kunnen sociale netwerken, gaming apps, live chats of forums zijn, maar ook beurs software of ad servers, waar snelheid alles is. Snel en schaalbaar, Node.js is de technologie bij uitstek voor data-intensieve, real-time IoT-apparaten en -toepassingen.
Node.js maakte van JavaScript een full-stack technologie bij uitstek voor de ontwikkeling van webapplicaties. Door zijn niet-blokkerende architectuur werkt Node.js goed voor het coderen en uitzenden van video en audio, het uploaden van meerdere bestanden, en datastreaming. Dit laatste kan buitengewoon nuttig zijn voor software in de reisindustrie waar je gegevens moet halen uit verschillende API’s van verschillende leveranciers.
De laatste tijd wordt Node.js actief gebruikt in software op ondernemingsniveau. Hoewel er nog steeds veel discussie over is, hebben veel grote bedrijven en wereldwijde organisaties, zoals Capital One en NASA, Node.js al geadopteerd. En het ecosysteem van Node.js voor ondernemingen wordt steeds volwassener met tools als IBM API Connect, Triton van Joyent, N|Solid van NodeSource, Red Hat OpenShift, Trace van RisingStack en anderen.
Deze post maakt deel uit van onze serie “Het goede en het slechte”. Voor meer informatie over de voor- en nadelen van de meest populaire technologieën, zie de andere artikelen uit de serie:
The Good and The Bad of Xamarin Mobile Development
The Good and the Bad of JavaScript Full Stack Development
The Good and the Bad of ReactJS and React Native
The Good and the Bad of Swift Programming Language
The Good and the Bad of .NET Framework Programmeren
Het goede en het slechte van Angular Development
Het goede en het slechte van Selenium Test Automation Tool
Het goede en het slechte van Android App Development