Što je novo u Googleovom V8 JavaScript engineu verzija 7

Beta V8 verzija 7.4 je sada dostupna, s potencijalom da proširi trag motora na platforme poput Apple iOS-a. V8 je Googleov otvoreni izvor JavaScript i WebAssembly mehanizam za preglednik Chrome. To je glavna komponenta u pregledniku Chrome i JavaScript izvođenju Node.js.

Gdje preuzeti Google V8

Proizvodnu verziju Google V8 možete preuzeti s repo-a Chromium V8.

Buduća verzija: Što je novo u verziji V8 7.4

S proizvodnom verzijom koja treba izaći u travnju 2019., Google V8 beta 7.4 ima sljedeće nove značajke:

  • V8 bez JIT-a, u kojem je podržano izvršavanje JavaScript-a bez dodjeljivanja izvršne memorije u vrijeme izvođenja. To bi moglo omogućiti širenje V8 na platforme poput Apple iOS-a, pametnih televizora i igraćih konzola. Zadana konfiguracija V8 oslanjala se na sposobnost alokacije i izmjene izvršne memorije tijekom izvođenja. Ali postoje situacije u kojima može biti poželjno pokrenuti motor bez dodjeljivanja izvršne memorije, poput platformi koje zabranjuju pristup upisivanju u neizvršivu memoriju za neprivilegirane aplikacije, uključujući iOS. Također, onemogućavanje upisa u izvršnu memoriju smanjuje površinu napada aplikacije za eksploatacije. S načinom bez JIT-a, V8 prelazi u način samo za tumače za JavaScript; WebAssembly trenutno ne podržava ovaj način. JIT-manje način rada ipak dolazi s kaznom izvedbe.
  • WebAssembly Threads / Atomics sada su omogućeni na OS-ima koji nisu Android. Ovaj potez otključava upotrebu više jezgri putem WebAssembly-a, omogućavajući nove, kompjutorski teške upotrebe na webu.
  • Da bi poboljšala izvedbu, verzija 7.4 preskače prilagodbu argumenata u nekim slučajevima, smanjujući općenite pozive za 60 posto.
  • Poboljšane su performanse za pozivanje matičnih pristupnika, koji su DOM pristupi.
  • Izvedba pripremnika poboljšana je uklanjanjem deduplikacije koja uključuje imena svojstava. Pored toga, popravljen je problem s izvedbom koji je uključivao prilagođeno UTF-8 dekodiranje koje koristi izvorni tok.
  • Da bi se smanjio opseg memorije, implementirana je podrška za ispiranje kompajliranog bajt-koda iz funkcija tijekom prikupljanja smeća ako nisu nedavno izvršene.
  • Da bi podržali polja privatne klase, programeri mogu polje označiti kao privatno dodavanjem #prefiksa.

Gdje preuzeti V8 7.4 beta

V8 beta možete preuzeti s Googleovog repo servisa Chromium Git.

Trenutna verzija: Što je novo u verziji V8 7.3

Nove značajke u V8 7.3 uključuju:

  • --async-stack-tracesZastava je uključen po defaultu.
  • Tragovi asinhronog snopa bez troškova olakšavaju dijagnosticiranje problema u proizvodnji asinkronim kodom; stackimovina obično šalju log datoteke i usluge sada pruža bolji uvid u probleme.
  • Brži await, s uključenom --harmony-await-optimizationzastavicom prema zadanim postavkama. To je preduvjet za --async-stack-traces.
  • Brže pokretanje za WebAssembly putem optimizacija. Za većinu radnih opterećenja, kompilacija je poboljšana za 15 do 25 posto.
  • JavaScript značajke kao što fromEntries()su API za izvođenje inverzne vrijednosti Object.entriesString.prototype.MatchallAPI za olakšavanje primjene globalnih ili ljepljivih regularnih izraza na niz i ponavljanje kroz sva podudaranja.

Trenutna verzija: Što je novo u Google V8 verziji 7.2

Verzija 7.2 V8 iz siječnja 2019. poboljšava raščlanjivanje JavaScript-a, binarni format WebAssembly i memoriju.

Da bi se poboljšala brzina raščlanjivanja, verzija V8 7.2 uključuje ono što Google naziva najbržim JavaScript parserom u motoru, što rezultira bržim učitavanjem stranica i stranicama koje više odgovaraju Od V8 verzije 7.0, brzina raščlanjivanja radne površine poboljšala se za oko 30 posto, kaže Google.

Za memoriju su ugrađene ugrađene ugrađene datoteke koje spremaju memoriju dijeljenjem generiranog koda na više izolata sada podržane i omogućene po zadanom na IA32 arhitekturi.

Za WebAssembly, V8 7.2 ima poboljšanja u generiranju koda, uključujući omogućavanje razdvajanja čvorova u optimizacijskom planeru kompajlera i rotaciju petlje na stražnjem kraju. Također, poboljšano je predmemoriranje omotača i uvedeni su prilagođeni omoti za smanjenje općih troškova prilikom pozivanja uvezenih JavaScript matematičkih funkcija.

Promjene dizajna u alokatoru registra poboljšavaju izvedbu uzoraka koda koji će se pojaviti u kasnijem izdanju. Također, rukovatelji zamkama u verziji 7.2 poboljšavaju protok WebAssembly koda. Primjenjuju se na Windows, MacOS i Linux. U Chromiumu su omogućeni na Linuxu, a MacO i Windows slijede kad se potvrdi stabilnost. Planovi također zahtijevaju da budu dostupni na Androidu.

Ostale nove značajke u V8 7.2 uključuju:

  • Izvedba elemenata širenja poboljšana je kada se pojave na prednjoj strani literala niza.
  • Brža async/ await provedba je omogućena po zadanoj postavci. Izmjena se može spojiti u službenu specifikaciju ECMAScripta.
  • Tragovi stackasinhronog stoga nula-obale obogaćuju svojstvo asinkronim okvirima poziva. Ova je mogućnost dostupna iza --async-stack-traceszastavice naredbenog retka.
  • Podrška za polja javne klase, koja proširuje sintaksu JavaScript radi pojednostavljenja.
  • ListFormatPrijedlog za utvrđivanje položaja i oblik lista.
  • stringify sada daje izlazne sekvence za usamljene surogate, čineći izlaz valjanim Unicodeom.

Prethodna verzija: Što je novo u Google V8 verziji 7.1

Verzija 7.1 V8 iz studenog 2018. sadrži poboljšanja u memoriji i performansama, zajedno s poboljšanjima za JavaScript i binarni format WebAssembly. Za memoriju, bajtkodovi za tumač sada su ugrađeni u binarnu datoteku, čime se u prosjeku štedi oko 200 KB po izolatu. Da bi se poboljšala izvedba, poboljšana je analiza izlaza u kompajleru TurboFan za rukovanje kontekstima lokalnih funkcija za funkcije višeg reda, kada varijable iz okolnog konteksta pobjegnu u lokalno zatvaranje. Analizom bijega vrši se skalarna zamjena za objekte koji se nalaze na jedinici za optimizaciju.

Ostale nove značajke u V8 verziji 7.1:

  • Za JavaScript, RelativeTimeformatAPI sadržan u nadogradnji omogućuje lokalizirano formatiranje relativnog vremena, poput "jučer", bez žrtvovanja performansi. Također, verzija 7.1 podržava GlobalThisprijedlog, pružajući univerzalni mehanizam za pristup globalnom objektu čak i u strogim funkcijama ili modulima, bez obzira na platformu.
  • Za format bajt-koda WebAssembly postMessagepodržan je za module. Ovo se ponašanje odnosi na web radnike i ne proširuje se na unakrsne scenarije.

Prethodna verzija: Što je novo u Google V8 verziji 7.0

V8 verzija 7.0 u listopadu 2018. pregledava niti WebAssembly, koje pružaju primitiv za paralelno računanje. Da bi koristili niti u pregledniku Chrome koji koristi V8, programeri ga mogu omogućiti putem chrome://flags/#enable-webassembly-threadsOrigin Trial -a ili se prijaviti za eksperimentiranje s novim web značajkama. WebAssembly, zvani Wasm, omogućuje kompiliranje koda napisanog na različitim jezicima za pokretanje na webu.

Ostale nove značajke u V8 7.0 uključuju:

  • Za JavaScript descriptionse dodaje svojstvo prototype, pružajući više ergonomski način pristupa opisu. Također, Array.prototype.sortpostaje stabilna u verziji 7.0.
  • Proširenje ugrađenih ugrađenih ugrađenih podataka koji štede memoriju dijeljenjem generiranog koda na više izolata. V8 Verzija 6.9 omogućila je ugrađene ugrađene arhitekture X64, dok ih Verzija 7.0 proširuje na preostale platforme, osim IA-32.

Prethodna verzija: Što je novo u Google V8 verziji 6.9

V8 verzija 6.9 iz rujna 2018. usredotočena je na poboljšanja memorije i performansi za Googleov JavaScript mehanizam.

Radi uštede memorije, verzija 6.9 nudi ugrađene ugrađene module za računala zasnovana na x64. To su funkcije koje dijele svi izolati i ugrađuju se u samu binarnu datoteku, umjesto da se kopiraju na JavaScript gomilu, pa u memoriji postoje samo jednom, bez obzira na to koliko se izolata izvodi. Dizajneri V8 zabilježili su prosječno smanjenje veličine hrpe za 9 posto na 10 000 najboljih web stranica na x64 računalima. Podrška za druge platforme uslijedit će u kasnijim izdanjima.

Za performanse, V8 verzija 6.9 smanjuje vrijeme pauze sakupljanja smeća Mark-Compact poboljšanjem WeakMapobrade. Istovremeno i inkrementalno označavanje sada se može obraditi WeakMaps. Prije toga, ovaj je posao izveden u zadnjoj atomskoj pauzi sakupljanja smeća Mark-Compact. Odvoz smeća sada također obavlja više posla paralelno s manjim vremenima pauze.

Radi izvedbe, DataViewmetode su ponovno primijenjene u V8 Torque, štedeći skupi poziv na C ++ u usporedbi s prethodnom izvedbom izvođenja. Također, pozivi DataViewmetodama sada su uređeni prilikom kompajliranja JavaScript-a u TurboFan-ov optimizacijski kompajler. To pruža bolje vršne performanse za vrući kod.

V8 verzija 6.9 također uključuje Liftoff, osnovni prevoditelj za format prijenosnog koda WebAssembly. Omogućen je prema zadanim postavkama i namijenjen je smanjenju vremena pokretanja aplikacija temeljenih na WebAssembly generiranjem koda što je brže moguće. Kvaliteta samog koda sekundarni je prioritet za Liftoff, s tim da ga na kraju prekompajlira V8-ov TurboFan kompajler.

Liftoff je razvijen za rješavanje problema u kojem je zadnji kraj postupka kompilacije za TurboFan potrošio puno vremena i memorije, smanjujući performanse koda WebAssembly. Liftoff izbjegava vremenske i memorijske troškove posrednog predstavljanja, generirajući strojni kôd u jednom prolazu preko bajtkoda funkcije WebAssembly. Liftoff i Turbofan daju V8 dva stupnja kompilacije, s Liftoffom osnovnim kompajlerom za brzo pokretanje, a TurboFan pruža optimizaciju performansi.

Google također planira dodatno poboljšati vrijeme pokretanja, smanjiti potrošnju memorije i donijeti prednosti Liftoffa za veći broj korisnika. Ti planovi uključuju priključke za ARM procesore za upotrebu na mobilnim uređajima. Liftoff trenutno radi samo na Intelovim 32- i 64-bitnim platformama. Ostala poboljšanja koja se razmatraju uključuju:

  • Implementacija dinamičkog povezivanja za mobilne uređaje kako bi se prilagodila manja količina memorije na tim uređajima. Eksperimenti se nastavljaju s kombinacijom lijene kompilacije s Liftoffom i dinamičkim povezivanjem vrućih funkcija u TurboFanu.
  • Poboljšanje izvedbe generiranja Liftoff koda i poboljšanje generiranog koda.

Prethodna verzija: Što je novo u V8 verziji 6.8

Google V8 verzija 6.8, objavljena u srpnju 2018., usredotočena je na performanse i upotrebu memorije.

Izvedba je poboljšana poboljšanjima destrukturiranja niza. Kompajler za optimizaciju nije generirao idealan kôd za destrukturiranje niza, pa su graditelji V8 blokirali analizu bijega kako bi eliminirali privremenu alokaciju, što je učinilo destrukturiranje niza privremenim nizom brzim kao slijed zadataka.

Nova implementacija Object.assign poboljšava izvedbu implementacijom brzog puta za JavaScript.

Izvedba TypedArrays povećana je u slučajevima kada se sortiranje vrši pomoću funkcije usporedbe.

Ostale nove značajke u V8 verziji 6.8 uključuju:

  • Da bi poboljšali brzinu izvršavanja s prijenosnim formatom koda WebAssembly, programeri mogu koristiti provjeru granica temeljenu na zamkama, optimizaciju upravljanja memorijom na Linux x64 platformama.
  • Potrošnja memorije SFI-ja ( SharedFunctionInfo) smanjena je kompresijom i uklanjanjem nepotrebnih polja.
  • Također radi poboljšanja memorijskih mogućnosti, prekinuta je ovisnost o SFI-ima u kojima su SFI nepotrebno održavani na životu, što je dovelo do rizika od curenja memorije.

Prethodna verzija: Što je novo u V8 verziji 6.7

Googleov V8 JavaScriptengine dobiva poboljšanja za jezične značajke i sigurnost s verzijom 6.7, koja je sada u produkciji.

Motor V8 6.7 BigIntpo zadanim je postavkama omogućen. Očekuje se u budućoj verziji ECMAScripta,  BigIntsposlužiti kao numerički primitiv u JavaScript-u za predstavljanje cijelih brojeva s proizvoljnom preciznošću. Pomoću BigInt, moguće je izvesti argmetiku cijelih brojeva bez prelijevanja. BigIntmogao poslužiti kao osnova eventualne BigDecimalprovedbe, korisne za predstavljanje novčanih iznosa s decimalnom preciznošću.

Također je u V8 6.7 više ublažavanja ranjivosti bočnih kanala, namijenjenih sprječavanju curenja informacija u nepouzdani kôd za JavaScript i WebAssembly.

Prethodna verzija: Što je novo u V8 verziji 6.6

Verzija 6.6 Googleovog V8 JavaScript mehanizma usredotočena je na značajke jezika JavaScript i mogućnosti predmemoriranja koda.

Za JavaScript Function.prototype.toString()vraća točne kriške teksta izvornog koda, uključujući razmake i komentare. V8 Verzija 6.6 također implementira String.prototype.trimStart() and String.prototype.trimEnd(). Ta je sposobnost bila dostupna putem nestandardnih trimLeft()i trimRight()metoda, koje ostaju zamjenski nazivi novih metoda kako bi se omogućila povratna kompatibilnost.

Uz to, simboli za razdvajanje redaka i odlomaka mogu se koristiti u literalima niza, čime odgovaraju JSON-u. Prije su se oni tretirali kao završnici linija u literalima niza i njihova je upotreba rezultirala iznimkom SyntaxError.

Array.prototype.values Metoda daje polja iste iteracija sučelje kao ECMAScript 2015. Map i Setzbirki. Na njih se može stupiti u interakciju pomoću keys,values ili entriespozivanjem istoimene metode. Ova promjena može biti nekompatibilna sa postojećim JavaScript kodom; programeri koji pronađu neobično ili slomljeno ponašanje na web mjestu mogu pokušati onemogućiti ovu značajku putem chrome://flags/#enable-array-prototype-values.