Programmering

Hva er nytt i Googles V8 JavaScript-motor versjon 7

Beta V8 versjon 7.4 er nå tilgjengelig, med potensial til å utvide motorens fotavtrykk til plattformer som Apple iOS. V8 er Googles open source JavaScript- og WebAssembly-motor for Chrome-nettleseren. Det er en stift i både Chrome-nettleseren og JavaScript. runtime for JavaScript.

Hvor laster du ned Google V8

Du kan laste ned produksjonsversjonen av Google V8 fra Chromium V8 repo.

Fremtidig versjon: Hva er nytt i V8 versjon 7.4

Med produksjonsversjonen som skal ut i april 2019, har Google V8 beta 7.4 følgende nye funksjoner:

  • JIT-mindre V8, der JavaScript-utførelse støttes uten å tildele kjørbart minne ved kjøretid. Dette kan tillate utvidelse av V8 til plattformer som Apple iOS, smarte TV-er og spillkonsoller. Standardkonfigurasjonen til V8 har vært avhengig av muligheten til å tildele og modifisere kjørbart minne ved kjøretid. Men det er situasjoner der det kan være ønskelig å kjøre motoren uten å tildele kjørbart minne, for eksempel plattformer som har forbudt skrivetilgang til ikke-kjørbart minne for ikke-privilegerte applikasjoner, inkludert iOS. Hvis du ikke tillater skriving til kjørbart minne, reduseres angrepsflaten til applikasjonen for utnyttelser. Med JIT-mindre modus bytter V8 til en tolkemodus for JavaScript; WebAssembly støtter for øyeblikket ikke denne modusen. JIT-less-modus kommer imidlertid med en ytelsesstraff.
  • WebAssembly Threads / Atomics er nå aktivert på ikke-Android-operativsystemer. Dette trekket låser opp bruken av flere kjerner via WebAssembly, som muliggjør nye, beregningstunge bruksområder på nettet.
  • For å forbedre ytelsen hopper versjon 7.4 i noen tilfeller over tilpasning av argumenter, og reduserer samtaleforholdet med 60 prosent.
  • Ytelsen er forbedret for å ringe til innfødte aksessorer, som er DOM-aksessorer.
  • Preparser-ytelsen ble forbedret ved å fjerne en deduplisering som involverte eiendomsnavn. I tillegg ble et ytelsesproblem løst som involverte tilpasset UTF-8-dekoding som ble brukt av kildestrømmen.
  • For å redusere minneoverhead er det implementert støtte for spyling av kompilert bykode fra funksjoner under søppeloppsamling hvis de ikke har blitt utført nylig.
  • For å støtte private klassefelt kan utviklere markere et felt som privat ved å forhåndsstille det med # prefiks.

Hvor laster du ned V8 7.4 beta

Du kan laste ned V8 beta fra Googles Chromium Git repo.

Gjeldende versjon: Hva er nytt i V8 versjon 7.3

Nye funksjoner i V8 7.3 inkluderer:

  • De --async-stack-spor flagg er slått på som standard.
  • Zero-cost async stack spor gjør det lettere å diagnostisere problemer i produksjonen med asynkron kode; de stable eiendom som vanligvis sendes til loggfiler og tjenester gir nå mer innsikt i problemer.
  • En raskere avvente, med - harmoni-avvente-optimalisering flagget er slått på som standard. Dette er en forutsetning for --async-stack-spor.
  • Raskere oppstart for WebAssembly via optimaliseringer. For de fleste arbeidsbelastninger forbedres kompilering med 15 prosent til 25 prosent.
  • JavaScript-funksjoner som fromEntries (), en API for å utføre det inverse av Objekt. Innlegg, ogString.prototype.Matchall, en API for å gjøre det lettere å bruke globale eller klebrig regulære uttrykk på en streng og gjentas gjennom alle treff.

Gjeldende versjon: Hva er nytt i Google V8 versjon 7.2

Januar 2019 versjon 7.2 av V8 forbedrer JavaScript-parsing, WebAssembly binære format og minne.

For å forbedre parsningshastigheten inkluderer V8 versjon 7.2 det Google kaller motorens raskeste JavaScript-parser noensinne, noe som resulterer i raskere sideinnlasting og mer responsive sider. Siden V8 versjon 7.0 har parsingshastigheten på skrivebordet forbedret seg med rundt 30 prosent, sier Google.

For minne er innebygde innebygde moduler som sparer minne ved å dele generert kode på tvers av flere isolater nå støttet og aktivert som standard i IA32-arkitekturen.

For WebAssembly har V8 7.2 forbedringer i kodegenerering, inkludert aktivering av nodedeling i den optimaliserende kompilatorens planlegger og looprotasjon i bakenden. Dessuten er hurtigbuffering forbedret, og tilpassede innpakninger ble introdusert for å redusere overhead når du ringer til importerte JavaScript-mattefunksjoner.

Designendringer i registerfordeleren forbedrer ytelsen for kodemønstre som vises i en senere utgivelse. Fellehåndterere i versjon 7.2 forbedrer også gjennomstrømningen av WebAssembly-koden. De er implementert på Windows, MacOS og Linux. I Chromium er de aktivert på Linux, med MacO-er og Windows som følger når stabilitet er bekreftet. Planer krever også at de skal være tilgjengelige på Android.

Andre nye funksjoner i V8 7.2 inkluderer:

  • Spredningselementens ytelse er forbedret når disse forekommer bokstavelig talt.
  • En raskere asynkronisering/avvente implementering er aktivert som standard. Endringen kan slås sammen i den offisielle ECMAScript-spesifikasjonen.
  • Null-kyst asynk stak spor beriker stable eiendom med asynkrone samtalerammer. Denne muligheten er tilgjengelig bak --async-stack-spor kommandolinjeflagg.
  • Støtte for felt i offentlige klasser, som utvider JavaScript-syntaksen for forenkling.
  • De ListFormat forslag, for lokalisering av formatering av lister.
  • strenge gir nå ut rømningssekvenser for ensomme surrogater, noe som gjør utgangen gyldig Unicode.

Forrige versjon: Hva er nytt i Google V8 versjon 7.1

November 2018 versjon 7.1 av V8 inneholder forbedringer i minne og ytelse sammen med forbedringer for både JavaScript og det binære formatet WebAssembly. For minne er nå bytekoder for tolken innebygd i binæren, noe som sparer omtrent 200 kB i gjennomsnitt per isolat. For å forbedre ytelsen forbedres rømningsanalysen i TurboFan-kompilatoren for å håndtere lokale funksjonskontekster for høyere ordensfunksjoner, når variabler fra den omgivende konteksten flykter til en lokal lukking. Med fluktanalyse utføres skalar erstatning for objekter som er lokale for en optimaliseringsenhet.

Andre nye funksjoner i V8 versjon 7.1:

  • For JavaScript, er RelativTidsformat API omtalt i oppgraderingen tillater lokalisert formatering av relative tider, for eksempel "i går", uten å ofre ytelsen. Også versjon 7.1 støtter GlobalThis forslag, som gir en universell mekanisme for å få tilgang til det globale objektet selv i strenge funksjoner eller moduler, uavhengig av plattform.
  • For WebAssembly bytecode-format, postMessage støttes for moduler. Denne oppførselen er rettet mot nettarbeidere og utvides ikke til å behandle scenarier på tvers.

Forrige versjon: Hva er nytt i Google V8 versjon 7.0

V8 versjon 7.0 av oktober 2018 forhåndsviser WebAssembly-tråder, som gir en primitiv for parallell beregning. For å bruke tråder i Chrome-nettleseren, som bruker V8, kan utviklere aktivere den via krom: // flagg / # aktivere-nettmontering-tråder eller registrer deg for en Origin Trial, for å eksperimentere med nye nettfunksjoner. WebAssembly, også kjent som Wasm, gjør det mulig å samle koder skrevet på forskjellige språk for å kjøre på nettet.

Andre nye funksjoner i V8 7.0 inkluderer:

  • For JavaScript, er beskrivelse eiendommen er lagt til prototype, som gir en mer ergonomisk måte å få tilgang til beskrivelsen på. Også, Array.prototype.sort blir stabil i versjon 7.0.
  • Utvidelse av innebygde innebygde moduler, som sparer minne ved å dele generert kode på tvers av flere isolater. V8 versjon 6.9 aktiverte innebygde moduler på X64, mens versjon 7.0 utvider dem til de gjenværende plattformene unntatt IA-32.

Forrige versjon: Hva er nytt i Google V8 versjon 6.9

V8 versjon 6.9 i september 2018 fokuserer på forbedringer av minne og ytelse for Googles JavaScript-motor.

For minnebesparelser tilbyr versjon 6.9 innebygde innebygde moduler for x64-baserte datamaskiner. Dette er funksjoner som deles av alle isolater og er innebygd i selve binærmaterialet i stedet for å bli kopiert til JavaScript-haugen, og dermed bare eksisterer i minnet en gang, uavhengig av hvor mange isolater som kjører. V8s designere har sett en gjennomsnittlig reduksjon på 9 prosent av haugestørrelsen på de 10 000 beste nettstedene på x64-datamaskiner. Støtte for andre plattformer følger i senere utgivelser.

For ytelse reduserer V8 versjon 6.9 Mark-Compact-pausetider for søppeloppsamling ved å forbedre Svakt kart behandling. Samtidig og trinnvis markering nå kan behandles WeakMaps. Tidligere ble dette arbeidet utført i den siste atompausen i Mark-Compact søppeloppsamling. Søppelinnsamlingen gjør nå også mer arbeid parallelt med lavere pausetider.

For ytelse, DataView metodene er reimplementert i V8 Torque, og sparer en kostbar samtale til C ++ sammenlignet med den forrige implementeringen av kjøretiden. Også ringer til DataView metodene nå er inline når du kompilerer JavaScript i TurboFan optimaliserings kompilatoren. Dette gir bedre topp ytelse for hot code.

V8 versjon 6.9 inkluderer også Liftoff, en baseline-kompilator for bærbart kodeformat WebAssembly. Det er aktivert som standard og ment å redusere oppstartstider for WebAssembly-baserte apper ved å generere kode så raskt som mulig. Kodekvaliteten er en sekundær prioritet for Liftoff, med kode som til slutt kompileres på nytt av V8s TurboFan-kompilator.

Liftoff ble utviklet for å løse et problem der bakenden av kompileringsprosessen for TurboFan tok mye tid og minne, noe som reduserte ytelsen til WebAssembly-koden. Liftoff unngår tids- og minnekostnadene for mellomrepresentasjon, og genererer maskinkode i ett pass over bytekoden til en WebAssembly-funksjon. Liftoff og Turbofan gir V8 to kompileringsnivåer, med Liftoff en baseline kompilator for rask oppstart og TurboFan gir optimalisering for ytelse.

Google planlegger også å forbedre oppstartstiden ytterligere, redusere minneforbruket og gi fordelene med Liftoff til flere brukere. Disse planene involverer porter til ARM-prosessorer, for bruk på mobile enheter. Liftoff fungerer for tiden bare på Intel 32- og 64-biters plattformer. Andre forbedringer som vurderes inkluderer:

  • Implementering av dynamisk tier-up for mobile enheter for å imøtekomme lavere minnevolum på disse enhetene. Eksperimenter fortsetter med en kombinasjon av lat kompilering med Liftoff og dynamisk tier-up av varme funksjoner i TurboFan.
  • Forbedre ytelse for generering av Liftoff-kode og forbedre den genererte koden også.

Forrige versjon: Hva er nytt i V8 versjon 6.8

Google V8 versjon 6.8, utgitt i juli 2018, fokuserer på ytelse og minnebruk.

Ytelsen har blitt styrket av forbedringer i array-destrukturer. Den optimaliserende kompilatoren hadde ikke generert ideell kode for array-destrukturering, så V8-byggere blokkerte fluktanalyse for å eliminere midlertidig tildeling, noe som gjorde array-destructuring med en midlertidig array like raskt som en sekvens av oppgaver.

En ny implementering av Object.assign forbedrer ytelsen via implementering av en rask bane for JavaScript.

Ytelsen for TypedArrays er økt i tilfeller når sortering gjøres ved hjelp av en sammenligningsfunksjon.

Andre nye funksjoner i V8 versjon 6.8 inkluderer:

  • For å forbedre kjøringshastigheten med det bærbare WebAssembly-kodeformatet, kan utviklere bruke fellebaserte grensekontroll, en minnehåndteringsoptimalisering, på Linux x64-plattformer.
  • Minneforbruk av SFIer (SharedFunctionInfo) er redusert, via komprimering og fjerning av unødvendige felt.
  • For å forbedre hukommelsesevnen er det avbrutt en avhengighet av SFI-er der SFI-er unødvendig ble holdt i live, noe som hadde ført til risikoen for minnelekkasjer.

Forrige versjon: Hva er nytt i V8 versjon 6.7

Googles V8 JavaScript-motor får forbedringer for språkfunksjoner og sikkerhet med versjonen 6.7, som nå er i produksjonsutgivelse.

V8 6.7-motoren har BigInt støtte aktivert som standard. Forventes i en fremtidig versjon av ECMAScript,BigInts tjene som en numerisk primitiv i JavaScript for å representere heltall med vilkårlig presisjon. Med BigInt, er det mulig å utføre heltallsregning uten å flyte over. BigInt kunne tjene som grunnlag for en eventuell BigDecimal implementering, nyttig for å representere pengesummer med desimal presisjon.

Også omtalt i V8 6.7 er flere avbøtelser for sidekanalsårbarheter, ment å forhindre informasjonslekkasjer til ikke-klarert kode for JavaScript og WebAssembly.

Forrige versjon: Hva er nytt i V8 versjon 6.6

Versjon 6.6 av Googles V8 JavaScript-motor fokuserer på JavaScript-språkfunksjoner og kodebuffer.

For JavaScript, Function.prototype.toString () returnerer eksakte stykker kildekodetekst, inkludert mellomrom og kommentarer. V8 versjon 6.6 implementerer også String.prototype.trimStart () og String.prototype.trimEnd (). Denne muligheten hadde vært tilgjengelig gjennom ikke-standard trimLeft () og trimRight () metoder, som forblir aliaser for de nye metodene for å muliggjøre bakoverkompatibilitet.

I tillegg kan linjeskille- og avsnittseparatorsymboler brukes i strengbokstaver, og dermed matche JSON. Tidligere hadde disse blitt behandlet som linjeterminatorer i strengbokstaver, og bruken av dem resulterte i et SyntaxError-unntak.

De Array.prototype.values metoden gir matriser samme iterasjonsgrensesnitt som ECMAScript 2015 Kart og Sett samlinger. Disse kan samhandles over av nøklene,verdier, eller innganger ved å kalle den samme navnet metoden. Denne endringen kan være uforenlig med eksisterende JavaScript-kode. utviklere som finner merkelig eller ødelagt oppførsel på et nettsted, kan prøve å deaktivere denne funksjonen via chrome: // flags / # enable-array-prototype-values.