Binele și răul dezvoltării aplicațiilor web Node.js

author
20 minutes, 39 seconds Read
CONȚINUT

Timp de citire: 13 minute

Fiind cel mai popular limbaj de programare, JavaScript este, de asemenea, una dintre cele mai universale tehnologii de dezvoltare software. Utilizat în mod tradițional ca instrument de dezvoltare a front-end-ului web, a devenit, de asemenea, un important instrument de dezvoltare mobilă cross-platform ca tehnologie de bază pentru un număr mare de platforme, cum ar fi Apache Cordova/PhoneGap, React Native, NativeScript, Appcelerator Titanium.

Dar domeniile de aplicare pentru JavaScript nu se termină aici. În ultima vreme, a existat o mare vâlvă în jurul utilizării JavaScript pentru programarea pe server. Unul dintre instrumentele care au indicat această schimbare în dezvoltarea web a fost Node.js.

Ce este Node.js?

Node.js nu este, de fapt, un cadru sau o bibliotecă, ci un mediu de execuție, bazat pe motorul JavaScript V8 de la Chrome.

Tehnologia a fost prezentată pentru prima dată în 2009 de către Ryan Dahl la conferința europeană anuală JSConf și a fost recunoscută imediat ca fiind „cea mai interesantă bucată de software din universul JavaScript actual”.

Ca proiect open-source, Node.js a fost sponsorizat de Joyent, un furnizor de soluții de cloud computing și găzduire. Compania a investit într-o serie de alte tehnologii, cum ar fi cadrul Ruby on Rails, și a furnizat servicii de găzduire pentru Twitter și LinkedIn. Aceasta din urmă a devenit, de asemenea, una dintre primele companii care a folosit Node.js pentru backend-ul aplicațiilor sale mobile. Tehnologia a fost adoptată ulterior de o serie de lideri din domeniul tehnologiei, cum ar fi Uber, eBay, Walmart și Netflix, pentru a numi doar câțiva.

Cu toate acestea, abia recent a început adoptarea pe scară largă a server-side JavaScript cu Node.js. Interesul pentru această tehnologie a atins un vârf în 2017, conform Google Trends, și rămâne ridicat.

Descărcări Node.js. Instalați Long-Term Support și cele mai recente versiuni de Node.js pentru Windows și MacOS aici. De asemenea, un memento – npm este distribuit cu Node.js out-of-the-box.

Documentație. Găsiți documentația și ghidurile de inițiere la acest link.

Node.js IDEs . Aproape orice editor de cod popular are suport și plugin-uri pentru JavaScript și Node.js, deci contează doar modul în care vă personalizați IDE-ul în funcție de nevoile dumneavoastră de codare. Dar, mulți dezvoltatori laudă foarte mult instrumentele speciale de la VS Code, Brackets, Atom și WebStorm.

Frameworks. Utilizarea middleware-ului peste Node.js pur este o practică obișnuită care face viața dezvoltatorilor mai ușoară. Avem un articol separat care compară cadrele Node.js populare, în care analizăm Express.js, Meteor, Sales.js, Koa.js, Keystone.js și Loopback.js.

Pentru mai multe instrumente ale ecosistemului JavaScript utilizate cu Node.js, consultați articolul dedicat.

Pentru punctele forte și punctele slabe ale Node.js, acesta face subiectul unei discuții aprinse. Pentru a pune lucrurile la punct, le-am analizat pe amândouă – avantajele și dezavantajele Node.js – în încercarea de a afla ce proiecte pot beneficia de pe urma acestei alegeri tehnologice. Așadar, de ce să folosim Node.js?

O explicație rapidă a ceea ce este Node.js (vă rugăm să vă abonați dacă doriți mai mult conținut video)

Beneficiile Node.js

⊕ Stiva tehnologică robustă

JavaScript s-a dovedit a fi un lider de necontestat printre cele mai populare limbaje de programare. La rândul său, Node.js a devenit un nume de sine stătător în industrie. Cu un total de 368.985.988 de descărcări și peste 750 de noi colaboratori, după cum se afirmă în raportul Node-by-numbers 2018, proiectul pare a fi mai puternic ca niciodată.

Utilizarea Node.js pentru backend, obțineți automat toate avantajele dezvoltării full stack JavaScript, cum ar fi::

  • eficiență mai bună și productivitate generală a dezvoltatorilor
  • partajarea și reutilizarea codului
  • viteză și performanță
  • partajarea ușoară a cunoștințelor în cadrul unei echipe
  • un număr imens de instrumente gratuite

În consecință, echipa dvs. este mult mai flexibilă, dezvoltarea este mai puțin consumatoare de timp și, ca rezultat, obțineți un software rapid și fiabil. Dezvoltatorii instruiți în front-end JavaScript pot începe să programeze partea de server cu un efort minim. Având același limbaj pe ambele părți, puteți reutiliza codul pe frontend și pe backend prin înglobarea acestuia în module și crearea de noi niveluri de abstractizare.

În ciuda unei credințe comune, fiind un dezvoltator full stack nu sunteți în niciun caz limitat la stiva tradițională MEAN (MongoDB, Express.js, AngularJS și Node.js). Singurul must-have în acest caz este Node.js (nu există alternativă în JavaScript pentru programarea backend). Restul tehnologiilor din cadrul acestei stive sunt opționale și pot fi înlocuite cu unele alte instrumente care oferă funcționalități similare (citiți despre alternative în articolul nostru separat).

⊕ Procesare rapidă și model bazat pe evenimente

Node.js este rapid; nu este un mit. Aruncați o privire la testele de performanță realizate de toptal.com, care compară modul în care GO, PHP, Java și Node.js gestionează cererile simultane. Există câteva motive pentru care Node.js prezintă astfel de rezultate:

Motor V8. Motorul utilizat în implementarea Node.js a fost dezvoltat inițial pentru browserul Chrome. Scris în C++, V8 de la Chrome este folosit pentru a compila funcțiile scrise în JavaScript în cod mașină și își face treaba cu o viteză impresionantă. Nu trebuie decât să verificați benchmark-urile de performanță de pe blogul lui V8. Mulțumită faptului că Google a investit masiv în motorul său, V8 demonstrează îmbunătățiri ale performanței în fiecare an, iar Node.js extrage din el tot sacul de beneficii.

Intrarea/ieșirea non-blocantă și gestionarea asincronă a cererilor au făcut ca Node.js să fie capabil să proceseze cererile fără întârzieri. În contextul backend-ului, procesarea sincronă presupune că codul este executat într-o secvență. Astfel, fiecare cerere blochează un fir de execuție, ceea ce face ca alte cereri să aștepte finalizarea ei. Procesarea asincronă permite procesarea cererilor fără a bloca (non-blocking I/O) firul de execuție. Astfel, după ce o cerere este procesată, aceasta poate trimite un callback și poate continua să servească cereri. Acest lucru ajută Node.js să profite la maximum de single threading, rezultând un timp de răspuns scurt și o procesare concurentă.

Un alt aspect este modelul bazat pe evenimente. Atunci când se utilizează un limbaj comun atât pentru partea de client cât și pentru partea de server, sincronizarea are loc rapid, ceea ce este deosebit de util pentru aplicațiile bazate pe evenimente, în timp real. Datorită naturii sale asincrone, non-blocante, cu un singur fir de execuție, Node.js este o alegere populară pentru jocuri online, chat-uri, conferințe video sau orice soluție care necesită date actualizate în mod constant.

Exemplele vorbesc de la sine: multe companii importante au schimbat tehnologiile pentru a dezvolta Node.js și au observat îmbunătățiri semnificative – PayPal, de exemplu, a observat o scădere cu 35 la sută a timpului de răspuns de când a migrat de la Java.

⊕ Tehnologie scalabilă pentru microservicii

Din moment ce este un instrument tehnologic ușor, utilizarea Node.js pentru arhitectura microserviciilor este o alegere excelentă. Acest stil arhitectural este cel mai bine descris de Martin Fowler și James Lewis ca fiind „o abordare de dezvoltare a unei singure aplicații ca o suită de servicii mici, fiecare dintre ele rulând în propriul proces și comunicând cu mecanisme ușoare, adesea un API de resurse HTTP.”

În consecință, împărțind logica aplicației în module mai mici, microservicii, în loc să creați un singur nucleu mare și monolitic, permiteți o mai bună flexibilitate și puneți bazele unei creșteri ulterioare. Ca urmare, este mult mai ușor să adăugați mai multe microservicii peste cele existente decât să integrați caracteristici suplimentare cu funcționalitatea de bază a aplicației.

Arhitectura monolitică vs arhitectura microserviciilor pe scurt

Node.js este tehnologia preferată atunci când se construiesc și se implementează soluții ecosistemice de microservicii, potrivit Node.js User Survey Report 2017. Aproximativ jumătate dintre respondenți utilizează tehnologii legate de microservicii (și anume, Docker, principala platformă de containerizare a software-ului) pentru a construi aplicații web Node.js:

Porcentajul dezvoltatorilor care utilizează containerizarea Docker cu Node.js

Constatările mai recente arată că tehnologiile legate de microservicii, cum ar fi Docker și Kubernetes, au înregistrat o creștere a utilizării în 2018, pe măsură ce acest stil arhitectural devine doar mai popular. Având în vedere că fiecare microserviciu comunică cu baza de date direct prin fluxuri, o astfel de arhitectură permite o performanță și o viteză mai bună a aplicației. Un meci făcut în ceruri este susținut de două cadre utilizate pe scară largă pentru arhitectura microserviciilor. Cadrul Express enumeră IBM și Uber printre utilizatorii săi, în timp ce restify este folosit de npm și Netflix.

Ca un exemplu de implementare în direct, trecerea Walmart la arhitectura microservicii cu Node.js a avut ca rezultat următoarele beneficii imediate:

  • Creșterea peste noapte cu 20 la sută a conversiilor în general și cu 98 la sută a conversiilor pe mobil
  • Un timp de funcționare de sută la sută în ziua de Black Friday (gestionând peste 500 de milioane de vizualizări de pagini)
  • Economie de până la 40 la sută la hardware și de 20-50 la sută la operațiunile generale

Un alt exemplu strălucit al modului în care Node.js poate depăși concurența în ceea ce privește performanța este cazul GoDaddy. Derulând campania publicitară SuperBowl, compania a fost capabilă să gestioneze 10.000 de cereri pe secundă fără întreruperi, folosind doar 10 la sută din hardware datorită Node.js.

⊕ Ecosistem bogat

Un singur cuvânt – npm, un manager de pachete Node.js implicit, acesta servește, de asemenea, ca o piață pentru instrumente JavaScript open source, care joacă un rol important în progresul acestei tehnologii. Cu aproximativ 836.000 de biblioteci disponibile în registrul npm până în prezent și cu peste 10.000 de biblioteci noi care sunt publicate în fiecare săptămână, ecosistemul Node.js este destul de bogat. Aceleași statistici evidențiază faptul că 97% dintre aplicațiile web moderne sunt formate din module npm. Și aceasta este o dovadă a popularității sale incontestabile în rândul dezvoltatorilor.

Cu o varietate atât de mare de instrumente gratuite accesibile în câteva clicuri, există un potențial uriaș de utilizare a Node.js. În același timp, software-ul open source se bucură de o popularitate din ce în ce mai mare, deoarece vă permite să construiți soluții noi, reducând costurile totale de dezvoltare și timpul de lansare pe piață.

⊕ Sprijin corporativ puternic

După cum am menționat mai sus, dezvoltarea Node.js a fost susținută de Joyent. În 2015, Fundația Node.js a fost creată pentru a „permite adoptarea pe scară largă și a contribui la accelerarea dezvoltării Node.js”. IBM, Microsoft, PayPal, Fidelity și SAP au devenit membrii fondatori ai organizației.

Lista organizațiilor care utilizează Node.js în producție este în continuă creștere. În prezent, aceasta include aproape trei sute de companii bine cunoscute, cum ar fi PayPal, Medium, Trello, Uber și Zendesk.

Prea puține proiecte open source s-au bucurat vreodată de un sprijin atât de puternic din partea companiilor de top din lume. Iar acest lucru prevestește că Node.js are un potențial remarcabil.

⊕ Suport JSON fără cusur

Deși alte tehnologii backend precum PHP și Ruby on Rails pot folosi formatul JSON pentru comunicare, Node.js o face fără a converti între modele binare și folosește JavaScript. Acest lucru este deosebit de util atunci când trebuie să construiți API-uri RESTful pentru suportul bazelor de date NoSQL, cum ar fi MongoDB – litera M în stiva MEAN. Această comunicare fără probleme cu unul dintre principalele standarde de transfer de date este un alt avantaj al ecosistemului JavaScript.

Dezavantajele Node.js

Θ Blocaje de performanță cu sarcini de calcul grele

Cel mai mare dezavantaj al Node.js chiar și acum este incapacitatea sa de a procesa sarcini legate de CPU. Dar, pentru a înțelege care sunt rădăcinile acestei probleme, avem nevoie de un pic de context. Să începem cu elementele de bază, cu JavaScript în sine.

După cum știm, Node.js este un mediu de execuție care execută JavaScript pe partea de server. Fiind un limbaj de programare frontend, JavaScript folosește un singur fir pentru a procesa rapid sarcinile. Threading-ul nu este necesar pentru ca acesta să funcționeze, deoarece sarcinile din JavaScript sunt ușoare și ocupă puțin CPU.

Întorcându-ne la Node.js, acum știm de ce este considerat single threaded: Acesta procesează JavaScript, care este single threaded. Un model de intrare/ieșire care nu blochează înseamnă că Node.js răspunde la apelul clientului pentru a lansa o cerere și procesează sarcina în timpul în care trage callback-ul, pe măsură ce sarcina este gata. Procesând sarcinile în mod asincron, Node execută codul JS pe firul său unic, pe bază de eveniment. Aceasta este ceea ce se numește o buclă de evenimente.

Problema apare atunci când Node.js primește o sarcină legată de CPU: Ori de câte ori o cerere grea vine în bucla de eveniment, Node.js ar seta tot CPU-ul disponibil pentru a o procesa mai întâi, iar apoi ar răspunde altor cereri aflate în coadă. Acest lucru are ca rezultat o procesare lentă și o întârziere generală în bucla de evenimente, motiv pentru care Node.js nu este recomandat pentru calcule grele.

Cu toate acestea, în 2018, multithreading a fost introdus în Node.js ca o caracteristică experimentală odată cu actualizarea 10.5.0. O nouă caracteristică numită modul worker threads poate fi utilizată pentru a valorifica fire de execuție suplimentare dintr-un grup de fire de execuție, pentru a transporta sarcini legate de CPU. Dar acest lucru se poate face numai pe mașini cu mai multe nuclee, deoarece Node.js permite în continuare utilizarea unui singur nucleu pentru un singur fir. Acest lucru înseamnă că procesele paralele grele pot fi executate pe un fir diferit. Această caracteristică a rămas experimentală în Node.js versiunea 12, dar a fost îmbunătățită semnificativ.

Θ Callback hell issue

Datorită naturii sale asincrone, Node.js se bazează foarte mult pe callback-uri, funcțiile care se execută după ce fiecare sarcină din coada de așteptare este terminată. Păstrarea unui număr de sarcini în coadă în fundal, fiecare cu callback-ul său, ar putea duce la așa-numitul callback hell, care are un impact direct asupra calității codului. Pur și simplu, este o „situație în care callback-urile sunt imbricate în alte callback-uri la mai multe niveluri de adâncime, ceea ce poate îngreuna înțelegerea și întreținerea codului.”

Exemplu de cod cu callback-uri imbricate

Sursa imaginii: callbackhell.com

Astăzi, acest lucru este adesea considerat un semn al unor standarde de codare slabe și al lipsei de experiență cu JavaScript și Node.js în special. Codul, reprezentat mai sus, poate fi refactorizat și simplificat, în doar câțiva pași, așa cum se arată la callbackhell.com.

Θ Imaturitatea uneltelor

Deși modulele Node.js de bază sunt destul de stabile și pot fi considerate mature, există multe unelte în registrul npm care sunt fie de slabă calitate, fie nu sunt documentate/testate corespunzător. În plus, registrul în sine nu este suficient de bine structurat pentru a oferi instrumentele în funcție de ratingul sau calitatea lor. Prin urmare, ar putea fi dificil să găsiți cea mai bună soluție pentru scopurile dvs. fără a ști ce să căutați.

Faptul că Registrul Node.ecosistemul js este în mare parte open source, are și el impactul său. În timp ce calitatea tehnologiei Node.js de bază este supravegheată de Joyent și de alți contribuitori majori, restul instrumentelor ar putea fi lipsite de calitatea și standardele înalte de codare stabilite de organizațiile globale.

Θ Cererea în creștere pentru profesioniști cu experiență

În ciuda unei credințe comune, nu toți dezvoltatorii JavaScript sunt, de asemenea, dezvoltatori Node.js. Stăpânirea programării JavaScript pe partea de server necesită o cantitate semnificativă de efort și un anumit background în dezvoltarea backend. Din cauza unei curbe de învățare atât de abrupte, numărul de ingineri Node.js este semnificativ mai mic decât numărul total de profesioniști JS.

Pe măsură ce hype-ul legat de Node.js continuă să crească, cererea de profesioniști cu experiență în acest domeniu crește.

Există un mare decalaj de cunoștințe între studenții ingineri care pornesc la muncă și nevoile angajatorilor
Sursa:
Sursa: HackerRank

Așa, cu milioane de dezvoltatori JavaScript, ar putea fi dificil să găsiți un profesionist Node.js calificat pentru proiectul dumneavoastră. În acest caz, cu siguranță nu doriți să vă limitați căutarea la o singură țară. Procurarea de talente tehnice în străinătate a devenit de mult timp o normă în industria IT.

Cum să înveți Node.js

Iată pachetul tău de pornire pentru a înțelege și a lucra cu Node.js.

Turoriale. Nu vă limitați la documentația oficială: Vedeți tone de lecții gratuite pe W3Schools, vizitați atelierele internaționale de la Nodeschool și, bineînțeles, folosiți biblioteca de tutoriale gratuite de la freeCodeCamp.

Cursuri. Dacă sunteți un student dedicat, începeți un curs online despre Node.js: Iată unul pe PluralSight și, bineînțeles, unul pe Udemy.

Învățare interactivă. Vedeți resurse gratuite și plătite care vă permit să învățați Node.js folosind lecții și exerciții interactive. Una dintre cele mai populare este The Art of Node.

Community. Vedeți lista oficială a proiectelor Node.js gestionate de comunitate. Un sfat rapid: Cercetați grupurile de Facebook și comunitățile din zona dumneavoastră/prima limbă. Și, bineînțeles, consultați comunitățile Node.js de pe Reddit, o etichetă pe StackOverflow și subiectul de pe Quora.

Node.js vs Ruby on Rails vs Django vs Symfony

Nu există multe tehnologii care pot concura cu popularitatea sau cererea de pe piață a Node.js. Cu toate acestea, dacă ne uităm la alternativele pentru programarea pe partea de server, vedem cel puțin încă trei stele strălucitoare pe cer. Este vorba de Ruby on Rails, Django și Symfony. Să vedem dacă acestea se ridică la înălțimea beneficiilor lui Node.js și îi împărtășesc dezavantajele.

Compararea statisticilor Node.js, Rails, Django și Symfony

Sursa: StackShare

Ruby on Rails este cunoscut pentru limbajul său simplu, dar cu opinii, și pentru disponibilitatea gemelor – propriul ecosistem Rails de pachete personalizate. Ruby în sine este un limbaj intuitiv și prietenos pentru începători, cu o comunitate de susținere și dedicată care contribuie cu cod la RubyGems. Rails a fost creat pentru dezvoltare rapidă și prototipuri, deși este folosit cu succes de branduri precum GitHub, Twitter și Airbnb, ceea ce dovedește gama sa largă de cazuri de utilizare. Funcționalitatea sa de migrare a datelor este deosebit de impresionantă – spre deosebire de Node.js, care folosește pachete suplimentare, Rails are deja o funcție care vă permite să manipulați ușor și consistent baza de date.

Când ar trebui să folosiți Rails în locul lui Node.js? Rails nu poate concura cu performanța și scalabilitatea lui Node, cu toate acestea, Rails poate fi o alegere mai bună pentru o dezvoltare rapidă. Node.js trebuie să folosească module de la terți pentru a obține această viteză de dezvoltare, dar Ruby are totul în mod neconvențional. În ceea ce privește limbajul, niciun instrument nu are un avantaj distinct – în timp ce Node.js are o cerere mare, dar o propunere scăzută, fondul de talente al lui Ruby este inițial mai mic.

Django este un framework web pe Python, limbajul de programare cu cea mai rapidă creștere, conform datelor de pe StackOverflow. Comercializat ca un instrument pentru perfecționiștii cu termene limită, este creat pentru a face aplicații cât mai rapide și într-un mod cât mai structurat, sigur și ușor de înțeles. Django, alături de Python, este, de asemenea, considerat a avea o curbă de învățare mai ușoară. În timp ce lucrul cu Node.js va necesita cunoștințe extinse de JavaScript, Django este o tehnologie cu „baterii incluse”. Are un panou de administrare încorporat pentru a vă actualiza și întreține cu ușurință bazele de date și șabloanele pentru a vă accelera munca.

Când ar trebui să folosiți Django în locul Node.js? În comparație cu Node.js, Django este un instrument ușor de utilizat pentru începători. În afară de limbajul în sine, nu există un motiv real pentru a alege unul în detrimentul celuilalt. Este mai mult o întrebare legată de confortul și experiența dvs. fie cu JavaScript, fie cu Python, decât de cazurile de utilizare specifice.

Symfony este un framework PHP care îi oferă automat peste 20 de ani de documentație și o comunitate masivă și activă. Mai mult de 80 la sută din web este alimentat de PHP, cu proiecte precum Facebook, Baidu sau orice alt site web care rulează pe WordPress. Deși Symfony este doar unul dintre cadrele PHP de pe piață, este impresionant de stabil, scalabil și funcționează bine pentru proiecte de mare anvergură. De asemenea, folosește un motor de modelare Twig care funcționează asemănător cu multe sisteme de gestionare a conținutului bazate pe PHP.

Când ar trebui să folosiți Symfony în locul Node.js? Symfony suportă în mod natural caracteristicile CMS-urilor, cum ar fi șabloanele și tablourile de bord ale administratorilor, ceea ce îi permite să ruleze bloguri, site-uri de știri și magazine de eCommerce. Printre exemple se numără Yahoo Answers, Dailymotion și National Geographic.

Faceți ca Node.js să strălucească

Evident, cu toate avantajele și dezavantajele Node.js enumerate, tehnologia nu este un glonț de argint. Dar nici Java, .Net framework sau PHP nu sunt. Cu toate acestea, există cazuri specifice în care fiecare dintre tehnologiile enumerate performează cel mai bine. Pentru Node.js, acestea sunt aplicații în timp real cu I/O intense, care necesită viteză și scalabilitate.

Acestea pot fi rețele sociale, aplicații de jocuri, chat-uri live sau forumuri, precum și software de bursă sau servere publicitare, unde viteza este totul. Rapid și scalabil, Node.js este tehnologia aleasă pentru dispozitivele și aplicațiile IoT în timp real, cu utilizare intensivă a datelor.

Node.js a făcut din JavaScript o tehnologie full-stack de alegere pentru dezvoltarea aplicațiilor web. Datorită arhitecturii sale neblocante, Node.js funcționează bine pentru codificarea și difuzarea de materiale video și audio, încărcarea mai multor fișiere și streamingul de date. Aceasta din urmă ar putea fi extrem de utilă pentru software-ul din industria de turism în care trebuie să obțineți date din diferite API-uri ale unor furnizori diferiți.

Recent, Node.js a fost utilizat în mod activ în software-ul la nivel de întreprindere. Deși există încă multe discuții pe această temă, multe companii mari și organizații globale, cum ar fi Capital One și NASA, au adoptat deja Node.js. Iar ecosistemul Node.js pentru întreprinderi continuă să se maturizeze cu instrumente precum IBM API Connect, Triton de la Joyent, N|Solid de la NodeSource, Red Hat OpenShift, Trace de la RisingStack și altele.

Acest articol face parte din seria noastră „The Good and the Bad”. Pentru mai multe informații despre avantajele și dezavantajele celor mai populare tehnologii, consultați celelalte articole din această serie:

Binele și răul dezvoltării mobile Xamarin

Binele și răul dezvoltării Full Stack JavaScript

Binele și răul ReactJS și React Native

Binele și răul limbajului de programare Swift

Binele și răul .NET Framework Programming

Binele și răul dezvoltării Angular

Binele și răul instrumentului de automatizare a testelor Selenium

Binele și răul dezvoltării aplicațiilor Android

Binele și răul dezvoltării aplicațiilor Android

.

Similar Posts

Lasă un răspuns

Adresa ta de email nu va fi publicată.