Extras din curs
1. Ce este Node?
Node este o platformă foarte populară, relativ nouă (a debutat în 2009) pentru dezvoltarea
aplicațiilor web. Este al doilea cel mai urmărit proiect pe GitHub (https://github.com/nodejs), are
mulți urmăritori/followers pe grupul Google(https://groups.google.com/forum/#!forum/nodejs)
și mai mult de 240.000 de module publicate de comunitate în NPM - managerul de pachete
(https://www.npmjs.com/).
Prima prezentare a lui Node de către creatorul Ryan Dahl la Berlin, în 2009 poate fi urmărită pe
website-ul: http://www.jsconf.eu/2009/video_nodejs_by_ryan_dahl.html.
Site-ul oficial https://nodejs.org/en/ definește Node ca o platformă construită pe mediul de
execuție JavaScript din Chrome pentru a construi ușor și rapid aplicații de rețea scalabile. Node
folosește un model bazat pe evenimente, I/O care nu se blochează, ceea ce îl face rapid și eficient,
perfect pentru aplicații de procesare în timp real a cantităților mari de date (DIRT) ce se execută
pe toate dispozitivele distribuite.
1.1. Construit pe JavaScript
JavaScript este unul din cele mai populare limbaje de programare din lume
(https://www.youtube.com/watch?v=Trurfqh_6fQ). Conform indexului de popularitate Tiobe
(http://www.tiobe.com/tiobe_index?page=index), limbajul JavaScript ocupă în februarie 2016
locul 9. Încă din anul 2005, JavaScript a fost folosit pentru a fi create programe importante:
Google Maps , Gmail, o serie de aplicații web, de exemplu: Twitter, Facebook, GitHub. Încă din
2008, de la lansarea lui Google Chrome, performanța lui JavaScript a avut o rată de îmbunătățire
foarte mare datorită concurenței dintre bowsere (Mozilla, Microsoft, Apple, Opera, Google).
Performanța mașinilor virtuale moderne JavaScript schimbă tipurile de aplicații ce pot fi
construite pe web (https://www.chromeexperiments.com/). Un exemplu, cred că destul de
convingător este jslinux, un emulator PC executat în JavaScript (http://bellard.org/jslinux/), în
care se poate încărca un kernel Linux, interacționa cu un terminal și compila un program C, toate
acestea în browser.
Node folosește V8, mașina virtuală de la Google Chrome pentru programarea server-side. V8 dă
un impuls mare performanței deoarece preferă compilarea direct în cod mașină față de executare
codului bytecod sau folosirea unui interpretor. Deoarece Node folosește JavaScript pe server
există și alte beneficii:
- Dezvoltatorii pot scrie aplicații web într-un singur limbaj, ceea ce ajută la reducerea
schimbării contextului dintre dezvoltarea pentru client și cea pentru server
- JSON(JavaScript Object Notation - http://www.json.org/) este un format foarte popular,
de tip data-interchange, nativ JavaScript
- JavaScript este limbajul folosit în baze de date NoSQL(precum Redis - http://redis.io/ și
MongoDB - https://www.mongodb.org/)
- Există numeroase limbaje care compilează în JavaScript:
https://github.com/jashkenas/coffeescript/wiki/List-of-languages-that-compile-to-JS
- Node folosit pe mașina virtuală V8 este conform standardului ECMAScript
(https://en.wikipedia.org/wiki/ECMAScript)
1.2. Browser-ul
Node oferă o platformă asincronă, bazată pe evenimente (event-driven) pentru JavaScript de tip
server-side. Este important să înțelegem cum funcționează un browser pentru a putea înțelege
cum funcționează Node. Ambele sunt conduse de evenimente (folosesc event loop -
https://en.wikipedia.org/wiki/Event_loop) și Input/Output asincron
(https://en.wikipedia.org/wiki/Asynchronous_I/O).
Codul anterior jQuery execută o cerere Ajax folosind XML HttpRequest. Acest program execută o
cerere HTTP pentru resource.json. Atunci când se primește răspunsul, este apelată o funcție
anonimă (callback) ce conține argumentul data, adică datele primite din acea cerere.
În exemplu, se presupune că răspunsul pentru fișierul resource.json va fi stocat în variabila data
atunci când este gata iar funcția console.log nu se va executa până atunci. Operația de
intrare/ieșire (I/O), adică cererea Ajax ar bloca execuția scriptului să continue până este gata. Din
cauză că browserul este single threaded, dacă această cerere ar dura 400 de milisecunde până se
întoarce răspunsul, orice alte evenimente care s-ar întâmpla în acea pagină ar aștepta până
atunci, înainte de a putea fi executate. Vă puteți imagina experiența trăită de utilizatori dacă o
animație este oprită sau dacă aceștia încearcă să interacționeze într-un anume mod cu pagina.
Dar nu este cazul, deoarece când se întâmplă I/O în browser, se întâmplă în afara buclei de
evenimente, adică în afara execuției scriptului principal și apoi este emis un eveniment când I/O
se termină, care este manipulat de către o funcție, adesea numită callback.
I/O se întâmplă asincron. El nu blochează execuția scriptului, permițând buclei de evenimente să
răspundă oricărei interacțiuni sau cereri formulate în pagină. Acest lucru permite ca browserul
să fie receptiv pentru client și să se ocupe de interactivitatea din pagină.
Preview document
Conținut arhivă zip
- Cursuri AIBD.pdf