Den seneste store udgivelse af node.js bringer mange væsentlige forbedringer af JavaScript-samfundet, herunder en opdateret JavaScript Engine, NPM Version 5, Google V8, Node.js API, Async_Hooks, en WhatWG URL-parser, mere sikre buffere og meget mere. Her opdaterer vi dig på disse funktioner og de andre vigtigste aspekter af denne udgivelse.
Node.js 8 er frigivet under kodenavnet Carbon, og er tilgængeligt nu fra Node.js site. . Det vil blive aktivt arbejdet på i yderligere 18 måneder (ingen nye funktioner, bare fejlrettelser, sikkerhedsforbedringer og NPM-opdateringer), inden du går i vedligeholdelsestilstand. Som med tidligere udgivelser vil udgivelserne under vedligeholdelsesfunktion kun modtage kritiske sikkerhedsopdateringer og fejlrettelser.
Det er sikkert at sige, at siden node.js har eksisteret, er dette en af de største opdateringer, som runtime nogensinde har modtaget - det ændrer, hvordan native add-ons er skrevet og også bringer yderligere sikkerheds- og præstationsforbedringer.
Risingstack. har hjulpet virksomheder lykkes med node.js i fire år med træning, rådgivning eller udvikling. En af de største kampe vi havde tilføjet indfødte afhængigheder til projekter.
Før node.js 8, hvis applikationer var afhængige af moduler med native kode, når større nye node.js versioner ankom, som en applikationsbestemte, måtte du genkompilere dine afhængigheder. Hvis du var heldig, arbejdede de først.
Denne proces blev muliggjort med de enorme arbejdsmodul-vedligeholdere, der blev sat i at gøre deres moduler arbejde på tværs af inkompatible node.js versioner, hovedsagelig ved hjælp af et modul kaldet nan (node.js native abstraktioner).
Denne proces er langt fra ideel, da masser af virksomheder undlod at få deres afhængigheder opdateret, hvis de ikke kunne udarbejdes, og det lagde også en stor ekstra arbejdsbyrde på modulligeholdere. For at løse dette problem blev node.js API (eller N-API) introduceret.
Node.js API er en af de mest betydningsfulde forbedringer af node.js 8. Det bringer en veldefineret ABI (applikationsbinær grænseflade) til node.js for at gøre sin virtuelle maskine agnostic. Det betyder, at native moduler ikke kun fungerer med forskellige node.js versioner ved hjælp af Googles V8 JavaScript-motor, men også med Microsofts chakra.
For nu er N-API'en i en eksperimentel tilstand, hvilket betyder, at der kan ske betydelige ændringer for både implementeringen og API'en. Med dette sagt opfordres indfødte modulligeholdere til at prøve den nye grænseflade og give feedback.
Hvis du er en modul vedligeholder, kan du frigive en N-API-version af dit modul parallelt med din hovedmodul version. For at gøre det er den officielle anbefaling at offentliggøre en version af dit modul med N-API-mærket til NPM.
For at offentliggøre en N-API-version skal du:
På denne måde sikrer du, at N-API-versionen ikke bliver den nyeste udgivelse, så hvis nogen installerer dit modul som standard, får de ikke-N-N-API-versionen.
Garn, pakkehåndtering, der blev oprettet af Engineers of Facebook, blev udgivet i oktober 2016. Det forsøgte at tage fat på nogle mangler i den officielle NPM-klient, hovedsagelig ved at blive mere effektivt og deterministisk. De fleste af disse innovationer findes også i NPM 5.
Ligesom garn introducerede NPM 5 en låsemekanisme - når du installerer en ny afhængighed af dit projekt, vil det blive tilføjet automatisk ikke kun til Package.json. , men en ny fil kaldet Pakke-lock.json. såvel.
Du kan spørge, hvad forskellen er mellem Pakke-lock.json. og npm-Shrinkwrap.json. , som npm-krympwrap har været i NPM siden for evigt? Lang historie kort, de er i det væsentlige de samme, men Pakke-lock.json. oprettes automatisk.
Deres formål er at beskrive præcis, hvilken afhængighed træ npm skal oprette til din pakke. Hvis du har begge, npm-krympwrap. vil have forrang. Baseret på NPMs anbefaling, skal du bruge npm-Shrinkwrap.json. Hvis du vil offentliggøre det, så vil dine modulforbrugere også bruge det. På den anden side bør du bruge pakke-lock.json internt - selv kontrolleret i repositories.
Men forbedringer til NPM 5 er ikke stoppet med at tilføje en låsfil - med den nye version, alle de moduler, du installerer, gemmes automatisk, og de vil blive tilføjet både til din Package.json. og Pakke-lock.json. fil.
Den måde, hvorpå NPM scripts arbejder, har også ændret sig lidt. Først og fremmest løber forudinstallerede scripts nu før alt andet, så de kan ændre DODE_MODULES Directory, før CLI faktisk læser det. Udover dette er to nye scripts blevet tilføjet - Preppack og Postpack. De kører begge på NPM-pakken og NPM-udgiv også, men ikke på NPM-installation.
I hjertet af Node.js er JavaScript-motoren, der fortolker din JavaScript-kode, skaber bytecode fra den og lader dit programkørsel. Med den nye node.js 8 udgivelse blev dette også opdateret.
Med den opdaterede V8-motor introduceres større ydelsesforbedringer - men vigtigere er det garanteret at have en fremadrettet applikationsbinisk grænseflade. Det betyder, at node.js vil kunne opdatere V8-motoren uden en større node.js frigivelse.
Dette er afgørende, da de nyere versioner af V8-motoren introducerer en ny kompilatorrørledning, som vil introducere yderligere præstationsforbedringer til node.js. Denne opdatering var så vigtig, at det var grunden til, at den oprindelige node.js 8 udgivelsesdato blev udskudt.
Den nuværende pipeline er alt for komplekst, og indførelse af nye sprogfunktioner betyder normalt at røre flere dele af rørledningen. Med den nye pipeline bliver det meget enklere.
Tænding, den nye tolk og turbofan, den nye optimeringskompilator, har været i udvikling i næsten tre og halv år. De er fundamentet, som nye sprogfunktioner vil blive bygget på. De omfatter den oplevelse, som V8-holdet på Google indsamlede fra at måle JavaScript-applikationer i Real-life.
For bedre at forstå, hvad Async kroge er, lad os tage et skridt tilbage og få fat i fortsættelsen lokal opbevaring først. De arbejder som tråd-lokal opbevaring i gevindprogrammering, men i node.js bruger den tilbagekaldelser til at videregive kontekst.
Forestil dig at du skriver en applikation, der henter et produkt fra databasen, så vil du senere sende det i dit HTML-svar:
Const CreatureamesPace = Kræv ('Continuation-Local-Storage'). CreatureamesPace
const session = creatureamespace ('my-app-session')
const db = kræve ('./ db.js')
Funktion Onrequest (Valg, Næste) {
db.fetchuserbyid (Valg.Id, Funktion (Fejl, Bruger) {
hvis (fejl) {
Return næste (Fejl)
}
session.set ('bruger', bruger)
Næste()
})
Senere, hvis du vil have adgang til brugerobjektet, er alt, hvad du skal gøre, tage fat på det fra det lokale lager:
Const GetNamesPace = Kræv ('fortsættelse-lokalopbevaring'). GetnamesPace
const session = getnamespace ('min session')
const render = krav ('./ render.js')
Funktion Afslut (svar) {
const bruger = session.get ('bruger')
render ({bruger: bruger}). Rør (svar)
}
Denne teknik bruges i vid udstrækning af applikationsydelsesovervågningsudbydere, såsom spor af stigningstak, for at bevare udførelseskonteksten og indsamle overvågningsoplysninger fra produktionssystemer.
Med Async Hooks flyttes en lignende funktion til node.js Core - det hjælper med at spore asynkron anmodninger og håndtere gennem deres livscyklus. Det async_hooks. Modul giver en API til at registrere tilbagekaldelser, der sporer levetiden for asynkron ressourcer, der er oprettet inde i en node.js ansøgning.
Før node.js 8, hvis du ønskede at bruge kernemodulerne i et program, der bruger løfter, måtte du manuelt pakke kernemodulerne, så de kunne bruges på samme måde. Det så noget sådan ud:
const fs = krav ('fs')
Funktion ReadFilePromise (... args) {
returnere nyt løfte ((løse, afvise) = & gt; {
fs.readfile (... args, (fejl, resultat) = & gt; {
hvis (fejl) {
Retur Løs (Err)
}
løse (resultat)
})
})
}
ReadFilePromise ('./ pakke.json', 'utf-8')
.then ((res) = & gt; konsol.log (res))
.catch ((fejl) = & gt; konsol.log (fejl))
Med node.js 8 tilføjes en ny hjælpermetode til Util Core Module, Util.Promisify. Det tillader standard node.js callback-stil API'er, der skal pakkes i en funktion, der returnerer løfter.
Ved hjælp af denne funktion forenkles ovennævnte uddrag og bliver dette:
Const FS = Kræv ('FS')
const promisify = kræve ('util'). offentliggøre
readfilepromise = promisify (fs.readfile)
ReadFilePromise ('./ pakke.json', 'utf-8')
.then ((res) = & gt; konsol.log (res))
.catch ((fejl) = & gt; konsol.log (fejl))
Før node.js version 8 initialiserede buffere ved hjælp af den nye buffer (nummer) Constructor ikke hukommelsespladsen med nuller. Som følge heraf kan nye buffer-forekomster indeholde følsomme oplysninger, hvilket fører til alvorlige sikkerhedsproblemer - selv populære moduler som Mongoose, WS eller anmodningsmodulet blev påvirket.
Men hvordan kom vi derhen? Når JavaScript blev flyttet fra browseren til serversiden, var der behov for hurtig og nem databehandling - så bufferklassen blev tilføjet. Buffer er et mutabelt array af binære data. Når den bruges sammen med den konstruktør, der beder om størrelsen af den nye buffer, forbeholder den kun hukommelsespladsen, men rent ikke det.
Da din server kan tjene flere brugere på samme tid (i modsætning til din browser), er det muligt, at det friskladede hukommelsesplads indeholder følsomme oplysninger fra andre brugere (selv adgangskoder!), Og det kan potentielt udsættes for en angriber.
Mens det var en forsætlig beslutning om at øge udførelsen af den nye bufferskabelse, var det for de fleste af os ikke den påtænkte anvendelse - selvom den blev dokumenteret. På grund af dette, begyndende med node.js 8, vil buffere tildelt ved hjælp af ny buffer (nummer) eller buffer (nummer) automatisk blive fyldt med nuller.
Før node.js 8, hvis du ønskede at debug din node.js applikationer, var en af de nemmeste løsninger at starte den indbyggede debugger ved hjælp af nodfejlfinding index.js. Med node.js 8 fjernes dette og erstattes af node-inspektør. Du kan stadig bruge CLI-debuggeren, men den vil blive fjernet kort tid.
Fra nu af skal du bruge node - Isspecip Index.js. eller node - ISPECT-BRK index.js Hvis du vil have debuggeren til at sætte et breakpoint på den første linje i applikationen. Når du har kørt det, vil du modtage et websocket link, som Google Chrome kan bruge til at forbinde dens debugger.
Du skal gå over til Chrome: // Inspicer I din Chrome-browser, og den vil automatisk genkende den løbende node.js-program, så du kan oprette forbindelse. Når du har tilsluttet din proces, får du Chrome's Debugger til at inspicere din løbende node.js-applikation.
Tidligere, hvis du ønskede at tjekke en fejl, du modtog i runtime og handler i overensstemmelse hermed, måtte du i de fleste tilfælde kontrollere fejlmeddelelsen. Dette var fejlagtigt, da fejlmeddelelser måske har ændret sig med nye node.js versioner.
Med node.js 8 er statiske fejlkoder blevet tildelt de fleste af fejlene - det er stadig en arbejdsindsats, men når det er færdigt, ændres disse fejlkoder, selvom meddelelsen i fejlen gør det .
For eksempel de nyligt introducerede Whatwg URL Api. vil smide AN. Err_invalid_url. Fejl i det følgende snippet, da parameteren ikke er en gyldig webadresse:
Const URL = Kræv ('URL'). URL
const myurl = ny url ('/ foo')
Som du kan se, har frigivelsen af node.js 8 opdateringen medført masser af nye og spændende forbedringer af JavaScript-samfundet. For at begynde at eksperimentere med alle disse nye funktioner selv, gå over til nodeejs.org. , Download node.js 8 binære og begynd at spille med dit nye værktøjssæt!
Denne artikel optrådte oprindeligt i Net Magazine. Udgave 296. Køb det her .
Relaterede artikler:
(Billedkredit: Antony Ward) I Maya er blendformer eller morph mål som de også er kendt, er en stærk måde at bring..
I denne tutorial viser vi dig, hvordan man opretter et stykke af 3D Art. med en realistisk tredimensionel teksteff..
I denne masterclass afslører jeg de grundlæggende trin, du skal følge for at lære Sådan tegner du figurer . J..
I denne tegning tutorial lærer du Sådan tegner og maler en zombie bruger Clip Studio Paint. , Dig..
Self-Publishing tegner sig for 22 procent af det britiske ebook-marked og fortsætter med at vokse, hvilket betyder, at forfatter..
Spacesuits er sjove at male, men hjelmdelen kan være vanskelig at få ret, især glaselementet, fordi du skal tage hensyn til de..
Når du arbejder i et lille team, har det tendens til at være svært at skrive og vedligeholde separat kode for Android, IOS og ..