Cea mai recentă versiune majoră a NODE.JS aduce multe îmbunătățiri semnificative la comunitatea JavaScript, inclusiv un motor JavaScript actualizat, NPM Versiunea 5, Google V8, NODE.JS API, Async_Hooks, un parser URL Whatwg, tampoane mai sigure și multe altele. Aici vă vom actualiza cu privire la aceste caracteristici și celelalte aspecte cele mai importante ale acestei eliberări.
Node.js 8 este lansat sub numele de cod de cod și este disponibil acum de la Nod.js site. . Se va lucra în mod activ la încă 18 luni (fără funcții noi, doar remedii de eroare, îmbunătățiri de securitate și actualizări NPM), înainte de a intra în modul de întreținere. Ca și în cazul lansărilor anterioare, în timpul lansării modului de întreținere vor primi numai actualizări critice de securitate și remedii de eroare.
Este sigur să spunem că de când NODE.JS a fost în jur, aceasta este una dintre cele mai mari actualizări pe care le-a primit vreodată - schimbă modul în care sunt scrise add-urile native și, de asemenea, aduce îmbunătățiri suplimentare de securitate și performanță.
Risingstack. A ajutat companiile să reușească cu NODE.JS timp de patru ani cu formare, consultanță sau dezvoltare. Una dintre cele mai mari lupte pe care le aveam adăugăm dependențe native proiectelor.
Înainte de NODE.JS 8, dacă aplicațiile au fost dependente de module cu cod nativ, ori de câte ori au sosit versiunile noi node.js, ca un mijloc de aplicare a trebuit să vă recompilați dependențele. Dacă ați fi norocoși, au lucrat la început.
Acest proces a fost făcut posibil cu metalorii mei de lucru enorme, făcându-se modulele lor în versiunile NODE.JS incompatibile, în special cu ajutorul unui modul numit Nan (node.js abstracții native).
Acest proces este departe de a fi ideal, deoarece o mulțime de companii nu au reușit să-și actualizeze dependențele dacă nu au putut fi compilate și, de asemenea, a pus un volum de muncă foarte mare pe metroul de întreținere a modulelor. Pentru a rezolva această problemă, a fost introdus NODE.JS API (sau N-API).
API-ul NODE.JS este una dintre cele mai semnificative îmbunătățiri ale NODE.JS 8. Acesta aduce o ABI definită (interfață binară de aplicație) la NODE.JS pentru a-și face mașina virtuală Agnostic. Acest lucru înseamnă că modulele native nu vor funcționa numai cu diferite versiuni NODE.JS utilizând motorul Google V8 JavaScript, dar și cu chakra Microsoft.
Deocamdată, N-API se află într-un stat experimental, ceea ce înseamnă că se pot întâmpla schimbări semnificative atât pentru punerea în aplicare, cât și pentru API. Cu acest domeniu de întreținere a modulelor native sunt încurajați să încerce noua interfață și să ofere feedback.
Dacă sunteți un metru de medule, puteți elibera o versiune N-API a modulului dvs. în paralel cu versiunea principală a modulului. Pentru a face acest lucru, recomandarea oficială este de a publica o versiune a modulului dvs. cu eticheta N-API la NPM.
Pentru a publica o versiune N-API, trebuie să:
În acest fel, asigurați-vă că versiunea N-API nu va deveni cea mai recentă versiune, deci dacă cineva instalează modulul dvs., implicit obține versiunea non-N-API.
Fire, Managerul de pachete creat de inginerii Facebook, a fost lansat în octombrie 2016. A încercat să abordeze unele deficiențe ale clientului oficial al NPM, în special devenind mai performant și determinist. Cele mai multe dintre aceste inovații sunt prezentate și în NPM 5.
La fel ca firul, NPM 5 a introdus un mecanism de fișiere de blocare - ori de câte ori instalați o nouă dependență de proiect, acesta va fi adăugat automat nu numai pachet.json. , dar un nou fișier numit pachet-lock.json. de asemenea.
Puteți întreba ce diferența este între pachet-lock.json. și npm-shrinkwrap.json. , deoarece NPM-Shrinkwrap a fost în NPM de când pentru totdeauna? Povestea lungă scurtă, ele sunt în esență aceleași, dar pachet-lock.json. este creată automat.
Scopul lor este de a descrie exact ce nPM de dependență trebuie să creeze pentru pachetul dvs. Dacă aveți amândouă, NPM-Shrinkwrap. va avea prioritate. Pe baza recomandării NPM, ar trebui să utilizați npm-shrinkwrap.json. Dacă doriți să o publicați, astfel încât consumatorii dvs. pentru modulul dvs. o vor folosi și el. Pe de altă parte, ar trebui să utilizați pachetul-Lock.json intern - chiar verificat în depozite.
Dar îmbunătățirile la NPM 5 nu s-au oprit cu adăugarea unui fișier de blocare - cu noua versiune, toate modulele pe care le instalați sunt salvate automat și acestea vor fi adăugate atât la dvs. pachet.json. și pachet-lock.json. fişier.
Modul în care funcționează scripturile NPM sa schimbat și un pic. În primul rând, scripturile preinstalate acum rulează înainte de orice altceva, astfel încât să poată modifica directorul NODE_MODALES înainte ca CLI să o citească de fapt. În afară de aceasta, au fost adăugate două scripturi noi - preambalate și postpack. Ambele rulează pe Pack-ul NPM, cât și pe NPM publică, dar nu pe instalarea NPM.
În inima NODE.JS este motorul JavaScript care interpretează codul dvs. JavaScript, creează codul de octet de la acesta și vă permite să rulați aplicația. Cu noua versiune NODE.JS 8, acest lucru a fost actualizat, de asemenea.
Cu motorul V8 actualizat, sunt introduse îmbunătățiri majore de performanță - dar mai important, este garantat că are o interfață binară de aplicație compatibilă înainte. Aceasta înseamnă că NODE.JS va putea să actualizeze motorul V8 fără o versiune majoră a nodului.
Acest lucru este crucial, deoarece versiunile mai noi ale motorului V8 vor introduce o nouă conductă de compilator, care va introduce îmbunătățiri suplimentare de performanță la NODE.JS. Această actualizare a fost atât de importantă încât a fost momentul în care data de lansare a NODE.JS 8 a fost amânată.
Conducta actuală este prea complexă și introducerea de noi caracteristici de limbă înseamnă, de obicei, atingerea mai multor părți ale conductei. Cu noua conductă, va deveni mult mai simplă.
Aprinderea, noul interpret și turbofan, noul compilator de optimizare, au fost în curs de dezvoltare de aproape trei ani și jumătate. Acestea sunt fundamentul pe care vor fi construite noi caracteristici lingvistice. Acestea includ experiența pe care echipa V8 la Google a colectat de la măsurarea aplicațiilor JavaScript din viața reală.
Pentru a înțelege mai bine ce sunt cârligele Async, să facem un pas înapoi și să trecem în primul rând cu depozitarea locală continuă. Lucrează ca depozitare locală a firului în programarea filetată, dar în nod.js utilizează apeluri pentru a trece contextul.
Imaginați-vă că scrieți o aplicație care aduce un produs din baza de date, apoi mai târziu pe care doriți să o trimiteți în răspunsul dvs. HTML:
Const CreareNameSpace = necesită ("continuare-locală-stocare"). CreareNamespace
const sesiune = createnamespace ('"App-sesiune")
const db = necesită ('./ db.js')
Funcție onrequest (opțiuni, următor) {
db.fetchuserbyid (Opțiuni.ID, funcția (eroare, utilizator) {
Dacă (eroare) {
Returnați următoarea (eroare)
}
sesiune.set ("Utilizator", utilizator)
Următorul()
})
Mai târziu, dacă doriți să accesați obiectul utilizatorului, tot ce trebuie să faceți este să îl luați de la depozitarea locală:
const getnamespace = necesită ("continuare-locală-stocare"). Getnamespace
const sesiune = getnamespace ("sesiunea mea")
const rand = necesită ('./ Renders.js')
Funcție Finish (răspuns) {
const user = sesiune.get ("Utilizator")
Render ({utilizator: utilizator}). Țeavă (răspuns)
}
Această tehnică este utilizată pe scară largă de furnizorii de monitorizare a performanțelor aplicațiilor, cum ar fi urmărirea prin RisingStack, pentru a menține contextul de execuție și a colecta informații de monitorizare din sistemele de producție.
Cu cârlige Async, o caracteristică similară este deplasată la NODE.JS Core - ajută la urmărirea cererilor și manipulatoarelor asincrone prin ciclul lor de viață. async_hooks. Modulul oferă un API pentru a înregistra apelurile de apel care urmărește durata de viață a resurselor asincrone create în cadrul unei aplicații NODE.JS.
Înainte de node.js 8, dacă ați dorit să utilizați modulele de bază într-o aplicație care utilizează promisiuni, a trebuit să înfășurați manual modulele de bază, astfel încât acestea să poată fi folosite în același mod. Arăta așa ceva:
const fs = necesită ('fs')
Funcție de citirePromise (... Args) {
Returnați o promisiune nouă ((rezolvați, respingeți) = & gt; {
fs.readfile (... args, (eroare, rezultat) = & gt; {
dacă (err) {
returnați rezolvarea (err)
}
Rezolvați (rezultatul)
})
})
}
ReadFilePromise ('./ Pachet.json', 'UTF-8')
. Atunci ((res) = & gt; console.log (res))
.Catch ((err) = & gt; console.log (eroare)
Cu NODE.JS 8, o nouă metodă Helper este adăugată la modulul Util Core, util.Mromiisificat. Permite API-urile standard de tip NODE.JS standard pentru a fi înfășurate într-o funcție care returnează promisiunile.
Folosind această funcție, fragmentul de mai sus este simplificat și devine acest lucru:
const fs = necesită ('fs')
const promidify = necesită ("util"). Promisiune
ReadfilePromise = Promisify (FS.READFILE)
ReadFilePromise ('./ Pachet.json', 'UTF-8')
. Atunci ((res) = & gt; console.log (res))
.Catch ((err) = & gt; console.log (eroare)
Înainte de node.js versiunea 8, tampoane alocate utilizând noul constructor tampon (număr) nu au inițializat spațiul de memorie cu zerouri. Ca rezultat, noile instanțe tampon ar putea conține informații sensibile, ducând la probleme grave de securitate - chiar și modulele populare, cum ar fi mongoose, WS sau modulul de solicitare, au fost afectate.
Dar cum am ajuns acolo? Când JavaScript a fost mutat din browser către partea serverului, a fost necesară o prelucrare rapidă și ușoară a datelor - astfel încât clasa tampon a fost adăugată. Tamponul este o gamă largă de date binare. Când este utilizat împreună cu constructorul care cere dimensiunea noului tampon, a rezervat doar spațiul de memorie, dar nu la curățat.
Pe măsură ce serverul dvs. poate servi în același timp multiple utilizatori (spre deosebire de browserul dvs.), este posibil ca spațiul de memorie proaspăt alocat să conțină informații sensibile de la alți utilizatori (chiar parole!), Și pot fi potențial expuse unui atacator.
Deși a fost o decizie intenționată de a stimula performanța noii creații de tampon, pentru majoritatea dintre noi, nu a fost utilizarea dorită - chiar dacă a fost documentată. Din acest motiv, începând cu NODE.JS 8, tampoane alocate utilizând un nou tampon (număr) sau tampon (număr) vor fi umplute automat cu zerouri.
Înainte de node.js 8, dacă ați vrut să depanați aplicațiile NODE.JS, una dintre cele mai ușoare soluții a fost să începeți debuggerul încorporat, utilizând NODE Debug index.js. Cu nod.js 8, acest lucru este eliminat și înlocuit de inspector de noduri. Puteți utiliza în continuare debuggerul CLI, dar va fi eliminat în scurt timp.
De acum înainte, ar trebui să utilizați nod - Index , sau nodul --InSpect-BRK Index.js Dacă doriți ca debuggerul să pună un punct de întrerupere pe prima linie a aplicației. Odată ce o conduceți, veți primi un link WebSocket pe care Google Chrome îl poate utiliza pentru a conecta depanarea.
Ar trebui să mergeți la Chrome: // inspectați În browserul dvs. Chrome și va recunoaște automat aplicația Running NODE.JS, permițându-vă să vă conectați. După ce v-ați conectat la procesul dvs., veți primi debuggerul lui Chrome pentru a inspecta aplicația dvs. NODE.JS.
Anterior, dacă ați dorit să verificați o eroare pe care ați primit-o în timpul execuției și să acționați în mod corespunzător, în majoritatea cazurilor a trebuit să verificați mesajul de eroare. Aceasta a fost o eroare predispusă, deoarece mesajele de eroare s-au schimbat cu noile versiuni NODE.JS.
Cu NODE.JS 8, codurile de eroare statice au fost atribuite majorității erorilor - este încă un lucru în desfășurare, dar odată ce ați terminat, aceste coduri de eroare nu se vor schimba, chiar dacă mesajul din eroare .
De exemplu, noul introdus Whatwg URL API. va arunca an Err_invalid_url. Eroare în următorul fragment, deoarece parametrul nu este o adresă URL validă:
const url = necesită ("url"). URL
const myurl = nou URL ('/ Foo')
După cum puteți vedea, lansarea actualizării NODE.JS 8 a adus o mulțime de îmbunătățiri noi și interesante comunității JavaScript. Pentru a începe experimentarea cu toate aceste caracteristici noi, vă îndreptați spre nodejs.org. , Descărcați node.js 8 binar și începeți să jucați cu noul dvs. Toolset!
Acest articol a apărut inițial în revista netă Problema 296. Cumpărați-l aici .
Articole similare:
(Credit de imagine: Curtis Olly) Știați că este posibil să faceți propriul stilou pentru iPad sau tabletă? Sunt..
(Credit Imagine: Getty Images) Cloud Storage oferă o tonă de beneficii pentru creații de toate tipurile, în speci..
(Credit Imagine: Getty Images) Dacă ochelarii tăi păstrează încețoșați când purtați o mască de față, nu ..
Deși nu este posibil să se afișeze sunetul într-o imagine convențională, în continuare (interactivitate multimedia deopart..
Strategia UX. Este un proces care ar trebui să fie pornit înainte de începerea proiectării sau dezvoltării unui ..
Cel mai bun oraș este un oraș aglomerat, dar atmosfera aglomerată nu este un lucru ușor de capturat cu succes. Cu toate acest..
Rigurile de panglică sunt destul de comune în 3D Art. Producția de producție în aceste zile. Ei au un comport..
Uneori este mai eficient să combinați diferite hărți de deplasare la timp, mai degrabă decât să le scufundați pe toți. U..