Programiranje

Kaj je novega v Googlovem mehanizmu JavaScript V8, različica 7

Zdaj je na voljo beta različica V8 7.4, ki bi lahko razširila odtis motorja na platforme, kot je Apple iOS. V8 je Googlov odprtokodni JavaScript in WebAssembly motor za brskalnik Chrome. Je glavna v brskalniku Chrome in v času izvajanja JavaScript Node.js.

Kje prenesti Google V8

Proizvodno različico Google V8 lahko prenesete iz repozicije Chromium V8.

Prihodnja različica: Kaj je novega v različici V8 7.4

S produkcijsko različico, ki bo predvidoma aprila 2019, ima Google V8 beta 7.4 naslednje nove funkcije:

  • V8 brez JIT, v katerem je podprto izvajanje JavaScript brez dodeljevanja izvršljivega pomnilnika med izvajanjem. To bi lahko omogočilo razširitev V8 na platforme, kot so Apple iOS, pametni televizorji in igralne konzole. Privzeta konfiguracija V8 je temeljila na zmožnosti dodeljevanja in spreminjanja izvršljivega pomnilnika med izvajanjem. Vendar obstajajo situacije, ko je zaželeno zagnati motor, ne da bi dodelili izvršljiv pomnilnik, na primer platforme, ki prepovedujejo dostop do pisanja do neizvršljivega pomnilnika za neprivilegirane aplikacije, vključno z iOS-om. Prav tako onemogočanje zapisov v izvršljivi pomnilnik zmanjša površino napada aplikacije za podvige. Z načinom brez JIT V8 preklopi v način samo za tolmače za JavaScript; WebAssembly trenutno ne podpira tega načina. Način brez JIT pa ima kazen za zmogljivost.
  • Niti / Atomics WebAssembly so zdaj omogočeni v operacijskih sistemih, ki niso Android. Ta poteza odkrije uporabo več jeder prek WebAssembly, kar omogoča nove, računalniško težke uporabe v spletu.
  • Za izboljšanje zmogljivosti različica 7.4 v nekaterih primerih preskoči prilagoditev argumentov, tako da se režijski stroški klicev zmanjšajo za 60 odstotkov.
  • Izboljšana je bila zmogljivost klicev v izvorne dostopnike, ki so DOM-dostopniki.
  • Učinkovitost pripravljalnika je bila izboljšana z odstranitvijo deduplikacije, ki vključuje imena lastnosti. Poleg tega je bila odpravljena težava z zmogljivostjo, ki je vključevala dekodiranje po meri UTF-8, ki ga uporablja izvorni tok.
  • Da bi zmanjšali režijske stroške pomnilnika, je bila izvedena podpora za izpiranje prevedene bajtkode iz funkcij med zbiranjem smeti, če niso bile izvedene pred kratkim.
  • Za podporo poljem zasebnega razreda lahko razvijalci polje označijo kot zasebno, tako da ga dodajo z # predpono.

Kje prenesti V8 7.4 beta

V8 beta lahko prenesete iz Googlove repozicije Chromium Git.

Trenutna različica: Kaj je novega v različici V8 7.3

Nove funkcije v V8 7.3 vključujejo:

  • The --async-stack-traces zastava je privzeto vklopljena.
  • Neuspešne sledi asinhnega sklada olajšajo diagnosticiranje težav v proizvodnji z asinhrono kodo; sklad lastnost, ki se običajno pošlje v dnevniške datoteke in storitve, zdaj omogoča večji vpogled v težave.
  • Hitrejši čakati, z --harmony-await-optimizacija zastava je privzeto vklopljena. To je predpogoj za --async-stack-traces.
  • Hitrejši zagon za WebAssembly z optimizacijami. Pri večini delovnih obremenitev je sestavljanje izboljšano za 15 do 25 odstotkov.
  • Funkcije JavaScript, kot so fromEntries (), API za izvajanje inverzne vrednosti Object.entries, inString.prototype.Matchall, API za lažje nanašanje globalnih ali lepljivih regularnih izrazov na niz in ponavljanje skozi vsa ujemanja.

Trenutna različica: Kaj je novega v Googlu V8 različice 7.2

Različica 7.2 V8 iz januarja 2019 izboljšuje razčlenjevanje JavaScript, binarni format WebAssembly in pomnilnik.

Da bi izboljšali hitrost razčlenjevanja, različica V8 7.2 vključuje tisto, kar Google imenuje najhitrejši razčlenjevalnik JavaScript, kar omogoča hitrejše nalaganje strani in odzivnejše strani. Od različice V8 7.0 se je hitrost razčlenjevanja namizja izboljšala za približno 30 odstotkov, pravi Google.

Za pomnilnik so vgrajeni vgrajeni vgradni elementi, ki prihranijo pomnilnik z delitvijo generirane kode v več izolatah, zdaj privzeto podprti in omogočeni v arhitekturi IA32.

Za WebAssembly ima V8 7.2 izboljšave generiranja kode, vključno z omogočanjem razdeljevanja vozlišč v optimizacijskem načrtovalniku prevajalnika in vrtenjem zanke na zadnji strani. Izboljšano je tudi predpomnjenje ovojnic in uvedeni ovojniki po meri za zmanjšanje režijskih stroškov pri klicu uvoženih matematičnih funkcij JavaScript.

Spremembe zasnove razdeljevalnika registrov izboljšajo delovanje vzorcev kode, ki se bodo pojavili v kasnejši izdaji. Tudi upravljavci lovilcev v različici 7.2 izboljšajo prepustnost kode WebAssembly. Izvajajo se v sistemih Windows, MacOS in Linux. V Chromiumu so omogočeni v Linuxu, MacOs in Windows pa sledijo, ko je stabilnost potrjena. Načrti zahtevajo tudi, da so na voljo v Androidu.

Druge nove funkcije v V8 7.2 vključujejo:

  • Učinkovitost razširjenih elementov se je izboljšala, ko se ti pojavijo na sprednji strani dobesednega polja matrike.
  • Hitrejši asinh/čakati izvajanje je privzeto omogočeno. Sprememba se lahko združi v uradno specifikacijo ECMAScript.
  • Sledovi niza asinhnega sklada obogatijo sklad lastnost z asinhronimi okviri klicev. Ta možnost je na voljo za --async-stack-traces zastava ukazne vrstice.
  • Podpora za polja javnega razreda, ki širi sintakso JavaScript za poenostavitev.
  • The ListFormat predlog za lokalizacijo oblikovanja seznamov.
  • stringify zdaj izpiše ubežna zaporedja za osamljene nadomestke, zaradi česar je izhod veljaven Unicode.

Prejšnja različica: Kaj je novega v Google V8 različice 7.1

Različica 7.1 V8 iz novembra 2018 vsebuje izboljšave pomnilnika in zmogljivosti ter izboljšave za binarni format JavaScript in WebAssembly. Za pomnilnik so bajtode za tolmač zdaj vdelane v binarno datoteko in prihranijo približno 200 KB v povprečju na izolat. Za izboljšanje zmogljivosti je izboljšana analiza pobega v prevajalniku TurboFan, da obravnava kontekst lokalnih funkcij za funkcije višjega reda, ko spremenljivke iz okoliškega konteksta pobegnejo v lokalno zaprtje. Z analizo pobega se izvede skalarna zamenjava za objekte, ki so lokalni enoti za optimizacijo.

Druge nove funkcije v različici V8 7.1:

  • Za JavaScript je RelativeTimeformat API, ki je predstavljen v nadgradnji, omogoča lokalizirano oblikovanje relativnih časov, na primer »včeraj«, ne da bi pri tem izgubil zmogljivost. Tudi različica 7.1 podpira GlobalThis predlog, ki zagotavlja univerzalni mehanizem za dostop do globalnega predmeta tudi v strogih funkcijah ali modulih, ne glede na platformo.
  • Za obliko bajt kod WebAssembly, postMessage je podprt za module. To vedenje je zajeto v spletne delavce in ni razširjeno na medprocesne scenarije.

Prejšnja različica: Kaj je novega v Google V8 različice 7.0

V8 različice 7.0 iz oktobra 2018 predogleduje niti WebAssembly, ki zagotavljajo primitiv za vzporedno računanje. Za uporabo niti v brskalniku Chrome, ki uporablja V8, ga lahko razvijalci omogočijo prek chrome: // flags / # enable-webassembly-niti ali se prijavite za preizkus izvora, da poskusite z novimi spletnimi funkcijami. WebAssembly, znan tudi kot Wasm, omogoča, da se v spletu izvaja sestavljanje kode, napisane v različnih jezikih.

Druge nove funkcije v V8 7.0 vključujejo:

  • Za JavaScript je opis lastnost je dodana v prototip, ki zagotavlja bolj ergonomski način dostopa do opisa. Prav tako Array.prototype.sort postane stabilna v različici 7.0.
  • Razširitev vdelanih vgrajenih datotek, ki prihranijo pomnilnik z delitvijo generirane kode v več izolatih. Vgrajena različica V8 različice 6.9 v arhitekturi X64, različica 7.0 pa jih razširja na preostale platforme, razen na IA-32.

Prejšnja različica: Kaj je novega v različici Google V8 različice 6.9

Različica 6.9, različica 6.9 iz septembra 2018, se osredotoča na izboljšave pomnilnika in zmogljivosti Googlovega mehanizma JavaScript.

Za prihranek pomnilnika različica 6.9 ponuja vgrajene vgrajene računalnike za x64. To so funkcije, ki si jih delijo vsi izolati in jih vdelajo v binarno datoteko, namesto da bi jih kopirali na kopico JavaScript, tako da obstajajo v pomnilniku samo enkrat, ne glede na to, koliko izolatov se izvaja. Oblikovalci V8 so zabeležili povprečno 9-odstotno zmanjšanje velikosti kopice na 10.000 najboljših spletnih mestih v računalnikih x64. Podpora za druge platforme bo sledila v kasnejših izdajah.

Za večjo zmogljivost V8 različice 6.9 z izboljšanjem zmanjša čas zaustavitve zbiranja smeti Mark-Compact WeakMap obravnavati. Zdaj lahko postopno in postopno označevanje obdelamo WeakMaps. Prej je bilo to delo opravljeno v zadnji atomski pavzi zbiranja smeti Mark-Compact. Zbiranje smeti zdaj opravlja tudi več dela vzporedno s krajšimi časi premorov.

Za uspešnost, DataView metode so bile ponovno uporabljene v V8 Torque, kar je prihranilo drag klic na C ++ v primerjavi s prejšnjim izvajanjem izvajanja. Tudi klici na DataView metode so zdaj vstavljene pri prevajanju JavaScripta v prevajalnik za optimizacijo TurboFan. To zagotavlja boljše delovanje vroče kode.

V8 različice 6.9 vključuje tudi Liftoff, osnovni prevajalnik za prenosno kodno obliko WebAssembly. Omogočena je privzeto in naj bi s čim hitrejšim ustvarjanjem kode zmanjšala čas zagona aplikacij, ki temeljijo na WebAssembly. Kakovost same kode je za Liftoff sekundarna prednostna naloga, pri čemer jo mora na koncu prevesti prevajalnik TurboFan V8.

Liftoff je bil razvit za reševanje vprašanja, pri katerem je zadnji del postopka prevajanja za TurboFan porabil veliko časa in pomnilnika ter zmanjšal delovanje kode WebAssembly. Liftoff se izogne ​​časovni in pomnilniški režiji vmesne predstavitve, tako da v enem prehodu generira strojno kodo nad bajtno kodo funkcije WebAssembly. Liftoff in Turbofan dajeta V8 dve stopnji prevajanja, pri čemer je Liftoff osnovni prevajalnik za hiter zagon, TurboFan pa optimizacijo za delovanje.

Google načrtuje tudi nadaljnje izboljšanje zagonskega časa, zmanjšanje porabe pomnilnika in več koristi uporabnikom Liftoffa. Ti načrti vključujejo vrata za procesorje ARM za uporabo v mobilnih napravah. Liftoff trenutno deluje samo na Intelovih 32- in 64-bitnih platformah. Druge obravnavane izboljšave vključujejo:

  • Vpeljava dinamičnega nivoja za mobilne naprave, da se prilagodi manjša količina pomnilnika v teh napravah. Poskusi potekajo s kombinacijo lene kompilacije z Liftoffom in dinamičnega povečevanja vročih funkcij v TurboFanu.
  • Izboljšanje učinkovitosti ustvarjanja kode Liftoff in tudi izboljšanje ustvarjene kode.

Prejšnja različica: Kaj je novega v različici V8 6.8

Google V8 različice 6.8, izdan julija 2018, se osredotoča na zmogljivost in porabo pomnilnika.

Zmogljivosti so izboljšale izboljšave destrukturiranja nizov. Prevajalnik za optimizacijo ni ustvaril idealne kode za destrukturiranje matrike, zato so graditelji V8 blokirali analizo pobega, da bi odpravili začasno dodelitev, zaradi česar je bilo destrukturiranje matrike z začasno matriko tako hitro kot zaporedje dodelitev.

Nova izvedba Object.assign izboljša zmogljivost z izvajanjem hitre poti za JavaScript.

Uspešnost TypedArrays je bila povečana v primerih, ko je sortiranje izvedeno s primerjalno funkcijo.

Druge nove funkcije v različici 6.8 V8 vključujejo:

  • Za izboljšanje hitrosti izvajanja s prenosno obliko kode WebAssembly lahko razvijalci na platformah Linux x64 uporabijo preverjanje meja, ki temelji na pasti, optimizacijo upravljanja pomnilnika.
  • Poraba pomnilnika SFI (SharedFunctionInfo) je bil zmanjšan s stiskanjem in odstranjevanjem nepotrebnih polj.
  • Tudi za izboljšanje zmogljivosti pomnilnika je bila prekinjena odvisnost od SFI-jev, pri katerih so bili SFI po nepotrebnem ohranjeni, kar je povzročilo tveganje puščanja pomnilnika.

Prejšnja različica: Kaj je novega v različici V8 6.7

Googlov V8 JavaScriptengine s podružnico različice 6.7, ki je zdaj v produkcijski izdaji, izboljšuje jezikovne funkcije in varnost.

Motor V8 6.7 ima BigInt podpora privzeto omogočena. Pričakovano v prihodnji različici ECMAScripta,BigInts služijo kot številčni primitiv v JavaScriptu za predstavitev celih števil s poljubno natančnostjo. S BigInt, je mogoče izvesti celoštevilčno aritmetiko brez prelivanja. BigInt lahko služila kot osnova za morebitno BigDecimal izvedba, uporabna za natančno predstavljanje vsot denarja.

V različici V8 6.7 je predstavljenih tudi več blažitev ranljivosti stranskih kanalov, katerih namen je preprečiti uhajanje informacij v nezaupljivo kodo za JavaScript in WebAssembly.

Prejšnja različica: Kaj je novega v različici V8 6.6

Različica 6.6 Googlovega mehanizma JavaScript V8 JavaScript se osredotoča na funkcije jezika JavaScript in zmožnosti predpomnjenja kod.

Za JavaScript Function.prototype.toString () vrne natančne rezine besedila izvorne kode, vključno s presledki in komentarji. V8 različica 6.6 tudi izvaja String.prototype.trimStart () in String.prototype.trimEnd (). Ta zmožnost je bila na voljo prek nestandardnih standardov trimLeft () in trimRight () metode, ki ostajajo vzdevki novih metod za omogočanje povratne združljivosti.

Poleg tega se lahko znaki ločevalnikov vrstic in odstavkov uporabljajo v nizovnih literalih, s čimer se ujemajo z JSON. Prej so bili v nizovnih literalih obravnavani kot zaključevalci vrstic in njihova uporaba je povzročila izjemo SyntaxError.

The Array.prototype.values metoda daje matrikam enak iteracijski vmesnik kot ECMAScript 2015 Zemljevid in Nastavite zbirk. Ti lahko medsebojno vplivajo tipke,vrednote, ali vnosi s klicanjem istoimenske metode. Ta sprememba je morda nezdružljiva z obstoječo kodo JavaScript; razvijalci, ki na spletnem mestu najdejo nenavadno ali pokvarjeno vedenje, lahko skušajo to funkcijo onemogočiti prek chrome: // flags / # enable-array-prototype-values.

$config[zx-auto] not found$config[zx-overlay] not found