Programavimas

Kas naujo „Google“ V8 „JavaScript“ variklio 7 versijoje

Dabar yra beta V8 7.4 versija, kuri gali išplėsti variklio pėdsaką tokiose platformose kaip „Apple iOS“. V8 yra „Google“ atvirojo kodo „JavaScript“ ir „WebAssembly“ variklis, skirtas „Chrome“ naršyklei. Tai yra tiek „Chrome“ naršyklės, tiek „Node.js JavaScript“ vykdymo laiko pagrindinis elementas.

Kur atsisiųsti „Google V8“

Gamybinę „Google V8“ versiją galite atsisiųsti iš „Chromium V8“ atsarginės kopijos.

Ateities versija: kas naujo V8 versijoje 7.4

Su gamybinės versijos pristatymu 2019 m. Balandžio mėn. „Google V8“ beta 7.4 turi šias naujas funkcijas:

  • „JIT-less V8“, kuriame palaikomas „JavaScript“ vykdymas, vykdymo metu nepaskirstant vykdomosios atminties. Tai gali leisti V8 išplėsti tokiose platformose kaip „Apple iOS“, išmanieji televizoriai ir žaidimų konsolės. Numatytoji V8 konfigūracija rėmėsi galimybe paskirstyti ir modifikuoti vykdomąją atmintį vykdymo metu. Tačiau yra situacijų, kai gali būti pageidautina paleisti variklį neskiriant vykdomosios atminties, pvz., Platformos, kurios uždraudė rašyti prieigą prie nevykdomosios atminties neprivilegijuotoms programoms, įskaitant „iOS“. Be to, neleidžiant rašyti į vykdomąją atmintį, sumažėja išnaudojimo programos atakos paviršius. Naudodamas režimą be JIT, „V8“ persijungia į „JavaScript“ tik vertėjų režimą; Šiuo metu „WebAssembly“ nepalaiko šio režimo. Tačiau „JIT-less“ režimas baudžiamas už rezultatą.
  • „WebAssembly“ gijos / „Atomics“ dabar įgalintos ne „Android“ operacinėse sistemose. Šis žingsnis atveria kelių branduolių naudojimą per „WebAssembly“, leidžiantį naujus, daug skaičiavimus reikalaujančius naudojimo būdus žiniatinklyje.
  • Norint pagerinti našumą, 7.4 versija kai kuriais atvejais praleidžia argumentų pritaikymą, sumažindama skambučių pridėtines išlaidas 60 procentų.
  • Patobulintas skambinimas į vietinius prieigą turinčius asmenis, kurie yra DOM prieigai.
  • Parengtinis našumas buvo pagerintas pašalinus dedukciją, susijusią su nuosavybės pavadinimais. Be to, buvo išspręsta našumo problema, susijusi su pasirinktiniu UTF-8 dekodavimu, kurį naudoja šaltinio srautas.
  • Siekiant sumažinti atminties sąnaudas, buvo įdiegta parama surinkti baitų kodus iš funkcijų šiukšlių surinkimo metu, jei jos neseniai nebuvo vykdomos.
  • Norėdami palaikyti privačios klasės laukus, kūrėjai gali pažymėti lauką kaip privatų, iš anksto jį paruošdami # priešdėlis.

Kur atsisiųsti V8 7.4 beta versiją

V8 beta versiją galite atsisiųsti iš „Google“ „Chromium Git“ atpirkimo.

Dabartinė versija: kas naujo V8 versijoje 7.3

Naujos V8 7.3 funkcijos apima:

  • --async-stack-pėdsakai vėliava įjungta pagal numatytuosius nustatymus.
  • Nulio kainos asinchroninio kamino pėdsakai leidžia lengviau diagnozuoti gamybos problemas naudojant asinchroninį kodą; kamino nuosavybė, paprastai siunčiama į žurnalo failus ir paslaugas, dabar suteikia daugiau informacijos apie problemas.
  • Greičiau laukti, su --harmonija laukia optimizavimo vėliava įjungta pagal numatytuosius nustatymus. Tai yra būtina sąlyga --async-stack-pėdsakai.
  • Greitesnis „WebAssembly“ paleidimas naudojant optimizavimą. Daugelio darbo krūvių sudarymas pagerinamas 15–25 proc.
  • „JavaScript“ funkcijos, tokios kaip fromEntries (), API atlikti atvirkštinį Objektas.įrašaiirString.prototype.Matchall, API, kad būtų lengviau pritaikyti visuotinius ar lipnius reguliarius posakius eilutėje ir kartoti per visas rungtynes.

Dabartinė versija: kas naujo „Google V8“ 7.2 versijoje

2019 m. Sausio mėn. V8 7.2 versija pagerina „JavaScript“ analizavimą, dvejetainį „WebAssembly“ formatą ir atmintį.

Siekiant pagerinti analizavimo greitį, į V8 7.2 versiją įtraukta tai, ką „Google“ vadina greičiausiu variklio „JavaScript“ analizatoriumi, todėl puslapiai įkeliami greičiau ir puslapiai reaguoja labiau. Nuo V8 versijos 7.0 darbalaukio analizės greitis pagerėjo apie 30 proc., Sako „Google“.

Atminties atveju IA32 architektūroje pagal numatytuosius nustatymus dabar palaikomi ir įgalinami įtaisytieji vidiniai įtaisai, kurie taupo atmintį dalindamiesi sugeneruotu kodu keliuose izoliatuose.

„WebAssembly“ versijoje V8 7.2 yra kodų generavimo patobulinimai, įskaitant mazgų skaidymo įgalinimą optimizuojančiame kompiliatoriaus planuoklyje ir kilpos pasukimą galinėje dalyje. Be to, patobulintas įvyniojimo talpinimas ir įdiegti pritaikyti įvyniojimo įrankiai, siekiant sumažinti pridėtines išlaidas, kai iškviečiamos importuotos „JavaScript“ matematikos funkcijos.

Dizaino pakeitimai registro paskirstytojui pagerina kodų modelių, pasirodysiančių vėlesniame leidime, našumą. Be to, spąstų tvarkytuvai 7.2 versijoje pagerina „WebAssembly“ kodo pralaidumą. Jie įdiegti „Windows“, „MacOS“ ir „Linux“. „Chromium“ jie yra įgalinti „Linux“, o „MacO“ ir „Windows“ gali sekti, kai bus patvirtinta stabilumas. Planuose taip pat reikalaujama, kad jie būtų pasiekiami „Android“.

Kitos naujos „V8 7.2“ funkcijos apima:

  • Skleistinių elementų našumas buvo pagerintas, kai jie atsiranda masyvo pažodžio priekyje.
  • Greičiau asinchroninis/laukti diegimas įjungtas pagal numatytuosius nustatymus. Pakeitimą galima sujungti su oficialia ECMAScript specifikacija.
  • Nulinio kranto asinchroninio kamino pėdsakai praturtina kamino ypatybė su asinchroniniais skambučių rėmeliais. Ši galimybė yra prieinama --async-stack-pėdsakai komandinės eilutės vėliava.
  • Palaikymas viešosios klasės laukuose, kuris išplečia „JavaScript“ sintaksę, kad būtų paprasčiau.
  • „ListFormat“ pasiūlymą dėl sąrašų formatavimo lokalizavimo.
  • sugriežtinti dabar išleidžia pavienių pakaitalų pabėgimo sekas, todėl išvestis galioja „Unicode“.

Ankstesnė versija: kas naujo „Google V8“ 7.1 versijoje

2018 m. Lapkričio mėn. V8 versijos 7.1 versijoje yra atminties ir našumo patobulinimai bei „JavaScript“ ir „WebAssembly“ dvejetainio formato patobulinimai. Kalbant apie atmintį, vertėjo vertimo baitai dabar yra įterpti į dvejetainį kodą, o vidutiniškai vienam izoliatui sutaupoma apie 200 KB. Siekiant pagerinti našumą, patobulinta „TurboFan“ kompiliatoriaus pabėgimo analizė, kad būtų galima tvarkyti vietinius funkcijų kontekstus aukštesnės eilės funkcijoms, kai kintamieji iš aplinkinio konteksto patenka į vietinį uždarymą. Atlikus pabėgimo analizę, skaliarinis pakeitimas atliekamas objektams, lokalizuotiems optimizavimo įrenginyje.

Kitos naujos V8 7.1 versijos funkcijos:

  • Jei naudojate „JavaScript“, „RelativeTimeformat“ Naujovinama API leidžia lokalizuoti santykinius laikus, pvz., „Vakar“, neprarandant našumo. Be to, 7.1 versija palaiko „GlobalThis“ pasiūlymas, numatantis universalų mechanizmą, leidžiantį pasiekti visuotinį objektą net atliekant griežtas funkcijas ar modulius, neatsižvelgiant į platformą.
  • Jei naudojate „WebAssembly“ baitų kodo formatą, postMessage yra palaikomas moduliams. Ši elgsena taikoma žiniatinklio darbuotojams ir nėra taikoma kryžminio proceso scenarijams.

Ankstesnė versija: kas naujo „Google V8“ 7.0 versijoje

2018 m. Spalio mėn. V8 versija 7.0 peržiūri „WebAssembly“ gijas, kurios suteikia primityvų lygiagrečiam skaičiavimui. Norėdami naudoti gijas „Chrome“ naršyklėje, kurioje naudojamas V8, kūrėjai gali ją įgalinti naudodami chrome: // flags / # enable-webassembly-threads arba užsiregistruokite „Origin“ bandymui, norėdami eksperimentuoti su naujomis žiniatinklio funkcijomis. „WebAssembly“, dar žinomas kaip „Wasm“, leidžia surinkti įvairiomis kalbomis parašytą kodą, kad jis būtų paleistas žiniatinklyje.

Kitos naujos „V8 7.0“ funkcijos apima:

  • Jei naudojate „JavaScript“, apibūdinimas nuosavybė pridedama prie prototipas, suteikiantis ergonomiškesnį būdą pasiekti aprašą. Be to, Masyvas.prototipas.rūšiuoti tampa stabilus 7.0 versijoje.
  • Įterptųjų įtaisų išplėtimas, kuris taupo atmintį dalijantis sugeneruotu kodu keliuose izoliatuose. V8 6.9 versija įgalino X64 architektūros integruotuosius elementus, o 7.0 versija juos praplečia kitose platformose, išskyrus IA-32.

Ankstesnė versija: kas naujo „Google V8“ 6.9 versijoje

2018 m. Rugsėjo mėn. V8 6.9 versijoje daugiausia dėmesio skiriama „Google“ „JavaScript“ variklio atminties ir našumo patobulinimams.

Taupant atmintį, 6.9 versijoje siūlomi įtaisytieji „x64“ kompiuterių integruoti įtaisai. Tai funkcijos, kurias naudoja visi izoliatai ir kurios yra įdėtos į patį dvejetainį failą, o ne nukopijuojamos į „JavaScript“ kaupą, taigi atmintyje esančios tik vieną kartą, neatsižvelgiant į tai, kiek izoliatų veikia. „V8“ dizaineriai pastebėjo, kad vidutiniškai 9 procentai sumažino 10 000 geriausių „x64“ kompiuterių svetainių krūvą. Kitų platformų palaikymas bus pateiktas vėlesniuose leidimuose.

Siekdamas našumo, V8 6.9 versija sutrumpina „Mark-Compact“ šiukšlių surinkimo pauzės laiką, pagerindama WeakMap apdorojimas. Dabar gali būti apdorojamas lygiagretus ir laipsniškas žymėjimas WeakMaps. Anksčiau šis darbas buvo atliktas atliekant paskutinę atominę „Mark-Compact“ šiukšlių surinkimo pauzę. Šiukšlių surinkimas dabar taip pat atlieka daugiau darbų lygiagrečiai mažesniam pauzės laikui.

Dėl pasirodymo „DataView“ metodai buvo iš naujo įdiegti V8 sukimo momente, taupant brangų skambutį C ++, palyginti su ankstesniu vykdymo metu. Be to, skambučiai „DataView“ metodai dabar yra išdėstyti kompiliuojant „JavaScript“ į „TurboFan“ optimizavimo kompiliatorių. Tai užtikrina geresnį karšto kodo našumą.

6.8 versijos V8 versijoje taip pat yra „Liftoff“ - nešiojamojo „WebAssembly“ nešiojamojo kodo formato kompiliatorius. Pagal numatytuosius nustatymus jis įgalintas ir skirtas sumažinti „WebAssembly“ pagrįstų programų paleidimo laiką kuo greičiau generuojant kodą. Pats kodo kokybė yra antraeilis „Liftoff“ prioritetas, kurį galiausiai kodą vėl sukompiliuos V8 „TurboFan“ kompiliatorius.

„Liftoff“ buvo sukurtas siekiant išspręsti problemą, kai „TurboFan“ kompiliavimo proceso galinė dalis sunaudojo daug laiko ir atminties, sumažindama „WebAssembly“ kodo našumą. „Liftoff“ išvengia tarpinio vaizdavimo laiko ir atminties pertekliaus, generuodamas mašinos kodą vienu leidimu per „WebAssembly“ funkcijos baitą. „Liftoff“ ir „Turbofan“ suteikia V8 du kompiliavimo lygius: „Liftoff“ yra pagrindinis kompiliatorius greitam paleidimui, o „TurboFan“ teikia optimizavimą darbui.

„Google“ taip pat planuoja toliau gerinti paleidimo laiką, sumažinti atminties sąnaudas ir suteikti „Liftoff“ pranašumų daugiau vartotojų. Šie planai apima ARM procesorių prievadus, skirtus naudoti mobiliuosiuose įrenginiuose. Šiuo metu „Liftoff“ veikia tik „Intel“ 32 ir 64 bitų platformose. Kiti svarstomi patobulinimai:

  • Dinaminio pakopos diegimas mobiliesiems įrenginiams, kad būtų galima pritaikyti mažesnę šių įrenginių atminties apimtį. Eksperimentai atliekami derinant tingų kompiliavimą su „Liftoff“ ir dinamišką karštųjų funkcijų pakopą „TurboFan“.
  • Pagerinti „Liftoff“ kodo generavimo našumą ir sugeneruoto kodo tobulinimą.

Ankstesnė versija: kas naujo V8 versijoje 6.8

„Google V8 6.8“ versija, išleista 2018 m. Liepos mėn., Orientuota į našumą ir atminties naudojimą.

Našumą padidino masyvų naikinimo patobulinimai. Optimizuojantis kompiliatorius nebuvo sugeneravęs idealaus kodo masyvų pertvarkymui, todėl V8 kūrėjai užblokavo pabėgimo analizę, kad pašalintų laikiną paskirstymą.

Naujas „Object.assign“ diegimas pagerina našumą įgyvendindamas greitą „JavaScript“ kelią.

„TypedArrays“ našumas padidėjo tais atvejais, kai rūšiavimas atliekamas naudojant palyginimo funkciją.

Kitos naujos V8 versijos 6.8 funkcijos apima:

  • Norėdami pagerinti vykdymo greitį naudodami nešiojamojo „WebAssembly“ kodo formatą, kūrėjai gali naudoti „spąstais“ pagrįstą ribų tikrinimą, atminties valdymo optimizavimą „Linux x64“ platformose.
  • SFI atminties suvartojimas (SharedFunctionInfo) buvo sumažintas suspaudžiant ir pašalinant nereikalingus laukus.
  • Be to, siekiant pagerinti atminties galimybes, nutrūko priklausomybė nuo SFI, kai SFI buvo be reikalo laikomi gyvi, o tai sukėlė atminties nutekėjimo riziką.

Ankstesnė versija: kas naujo V8 versijoje 6.7

„Google“ V8 „JavaScriptengine“ patobulina kalbos funkcijas ir saugą naudodama 6.7 versijos filialą, kuris dabar yra gamybos versijoje.

V8 6.7 variklis turi BigInt palaikymas įjungtas pagal numatytuosius nustatymus. Laukiama būsimoje „ECMAScript“ versijoje,BigInts tarnauja kaip skaitinis primityvas „JavaScript“, kad savavališkai tiksliai nurodytų sveikus skaičius. Su BigInt, galima atlikti sveiko skaičiaus aritmetiką be perpildymo. BigInt galėtų būti galimo pagrindo Didelis dešimtainis įgyvendinimas, naudingas tiksliai nurodant pinigų sumas.

Be to, V8 6.7 versijoje yra daugiau šalutinių kanalų pažeidžiamumų, skirtų užkirsti kelią informacijos nutekėjimui į nepatikimą „JavaScript“ ir „WebAssembly“ kodą.

Ankstesnė versija: kas naujo V8 versijoje 6.6

„Google“ V8 „JavaScript“ variklio 6.6 versijoje pagrindinis dėmesys skiriamas „JavaScript“ kalbos funkcijoms ir kodų talpinimo galimybėms.

„JavaScript“, Funkcija.prototype.toString () pateikia tikslius šaltinio kodo teksto gabalėlius, įskaitant tarpus ir komentarus. Taip pat įgyvendinama V8 6.6 versija String.prototype.trimStart () ir String.prototype.trimEnd (). Ši galimybė buvo prieinama per nestandartines trimLeft () ir trimRight () metodai, kurie išlieka naujųjų metodų slapyvardžiai, leidžiantys atgalinį suderinamumą.

Be to, eilučių pažodžiuose gali būti naudojami eilučių ir pastraipų skyriklio simboliai, taip derinant JSON. Anksčiau jie buvo traktuojami kaip eilučių terminatoriai eilutės literaluose, o dėl jų naudojimo buvo taikoma „SyntaxError“ išimtis.

Masyvas. Prototipas. Vertės metodas suteikia masyvams tą pačią iteracijos sąsają kaip ir „ECMAScript 2015“ Žemėlapis ir Nustatyti kolekcijos. Su jais gali bendrauti raktai,vertybesarba įrašai paskambindamas tuo pačiu pavadinimu. Šis pakeitimas gali būti nesuderinamas su esamu „JavaScript“ kodu; kūrėjai, radę keistą ar sugadintą elgesį svetainėje, gali pabandyti išjungti šią funkciją per chrome: // flags / # enable-array-prototype-values.

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