Programování

Co je nového v Google V8 JavaScript engine verze 7

Beta V8 verze 7.4 je nyní k dispozici s potenciálem rozšířit stopu motoru na platformy, jako je Apple iOS. V8 je otevřený zdrojový kód JavaScript a WebAssembly společnosti Google pro prohlížeč Chrome. Je základem v prohlížeči Chrome i v běhovém prostředí Java Node.js.

Kde stáhnout Google V8

Produkční verzi Google V8 si můžete stáhnout z repozitáře Chromium V8.

Budoucí verze: Co je nového ve V8 verze 7.4

S produkční verzí, která má vyjít v dubnu 2019, má Google V8 beta 7.4 následující nové funkce:

  • V8 bez JIT, ve kterém je podporováno provádění JavaScriptu bez přidělení spustitelné paměti za běhu. To by mohlo umožnit rozšíření V8 na platformy, jako je Apple iOS, chytré televize a herní konzole. Výchozí konfigurace V8 se spoléhala na schopnost alokovat a upravovat spustitelnou paměť za běhu. Existují však situace, kdy může být žádoucí spustit modul bez přidělení spustitelné paměti, například platformy, které mají zakázaný přístup pro zápis do neproveditelné paměti pro neprivilegované aplikace, včetně iOS. Zakázání zápisů do spustitelné paměti také snižuje útočnou plochu aplikace pro zneužití. V režimu bez JIT se V8 přepne do režimu pouze pro tlumočníka pro JavaScript; WebAssembly aktuálně tento režim nepodporuje. Režim bez JIT však přichází s výkonnostní pokutou.
  • Vlákna WebAssembly / Atomics jsou nyní povoleny v operačních systémech jiných než Android. Tento krok odemkne použití více jader prostřednictvím WebAssembly a umožní tak nové, výpočetně náročné použití na webu.
  • Aby se zlepšil výkon, verze 7.4 v některých případech přeskočí přizpůsobení argumentů a sníží režii volání o 60 procent.
  • Byl vylepšen výkon při volání do nativních přístupových objektů, což jsou přístupové objekty DOM.
  • Výkon preparátoru byl vylepšen odstraněním deduplikace zahrnující názvy vlastností. Dále byl opraven problém s výkonem, který zahrnoval vlastní dekódování UTF-8 používané zdrojovým streamem.
  • Aby se snížila režie paměti, byla implementována podpora pro vyprazdňování kompilovaného bytecode z funkcí během uvolňování paměti, pokud nebyly nedávno provedeny.
  • Chcete-li podporovat pole soukromé třídy, mohou vývojáři označit pole jako soukromé tak, že ho předloží pomocí # předpona.

Kam stáhnout V8 7.4 beta

V8 beta si můžete stáhnout z repozitáře Chromium Git společnosti Google.

Aktuální verze: Co je nového ve verzi V8 verze 7.3

Mezi nové funkce verze V8 7.3 patří:

  • The --async-stack-traces příznak je ve výchozím nastavení zapnutý.
  • Trasy asynchronního zásobníku s nulovými náklady usnadňují diagnostiku problémů ve výrobě pomocí asynchronního kódu; the zásobník vlastnost obvykle odesílaná do souborů protokolu a služeb nyní poskytuje lepší přehled o problémech.
  • Rychlejší čekat, s --harmony-await-optimalizace vlajka je ve výchozím nastavení zapnutá. To je předpoklad pro --async-stack-traces.
  • Rychlejší spuštění pro WebAssembly prostřednictvím optimalizací. Pro většinu úloh je kompilace vylepšena o 15 procent na 25 procent.
  • Funkce JavaScriptu jako fromEntries (), API k provedení inverze Object.entries, aŘetězec. Prototyp. Matchall, API, které usnadňuje použití globálních nebo lepivých regulárních výrazů na řetězec a iteraci ve všech shodách.

Aktuální verze: Co je nového v Google V8 verze 7.2

Verze 7.2 z V8 z ledna 2019 vylepšuje analýzu JavaScriptu, binární formát WebAssembly a paměť.

Aby se zlepšila rychlost analýzy, verze V8 verze 7.2 obsahuje to, co Google nazývá nejrychlejší analyzátor JavaScriptu motoru, což vede k rychlejšímu načítání stránek a rychlejším stránkám. Od verze V8 verze 7.0 se rychlost analýzy desktopu zlepšila přibližně o 30 procent, říká Google.

V případě paměti jsou nyní integrované integrované moduly, které šetří paměť sdílením generovaného kódu napříč více izoláty, ve výchozím nastavení podporovány a povoleny na architektuře IA32.

Pro WebAssembly má V8 7.2 vylepšení generování kódu, včetně povolení rozdělení uzlů v plánovači optimalizace kompilátoru a rotace smyčky v zadní části. Také bylo vylepšeno ukládání do mezipaměti obálek a zavedeny vlastní obálky, které snižují režii při volání importovaných matematických funkcí JavaScriptu.

Změny návrhu alokátoru registru zlepšují výkon vzorů kódu, které se objeví v pozdější verzi. Obslužné rutiny trapů ve verzi 7.2 také zlepšují propustnost kódu WebAssembly. Jsou implementovány v systémech Windows, MacOS a Linux. V prohlížeči Chromium jsou povoleny v systému Linux, přičemž MacO a Windows budou následovat po potvrzení stability. Plány také vyžadují, aby byly k dispozici pro Android.

Mezi další nové funkce ve verzi V8 7.2 patří:

  • Výkon prvků šíření byl vylepšen, když k nim dojde v přední části literálu pole.
  • Rychlejší asynchronní/čekat implementace je ve výchozím nastavení povolena. Změnu lze sloučit do oficiální specifikace ECMAScript.
  • Stopy asynchronního zásobníku nulového pobřeží obohacují zásobník vlastnost s rámy asynchronního volání. Tato funkce je k dispozici za --async-stack-traces příznak příkazového řádku.
  • Podpora pro pole veřejné třídy, která pro zjednodušení rozšiřuje syntaxi JavaScriptu.
  • The ListFormat návrh na lokalizaci formátování seznamů.
  • zesílit nyní vydává únikové sekvence pro náhradní náhrady, čímž je výstup platný Unicode.

Předchozí verze: Co je nového v Google V8 verze 7.1

Verze 7.1 verze V8 z listopadu 2018 obsahuje vylepšení paměti a výkonu spolu s vylepšeními pro JavaScript i binární formát WebAssembly. V případě paměti jsou nyní bajtové kódy tlumočníka vloženy do binárního souboru, což v průměru na izolát ušetří přibližně 200 kB. Aby se zlepšil výkon, je úniková analýza v kompilátoru TurboFan vylepšena o zpracování kontextů místních funkcí pro funkce vyššího řádu, když proměnné z okolního kontextu uniknou do lokálního uzavření. S únikovou analýzou se skalární nahrazení provádí u objektů lokálních k optimalizační jednotce.

Další nové funkce ve verzi V8 verze 7.1:

  • Pro JavaScript je RelativeTimeformat Rozhraní API obsažené v upgradu umožňuje lokalizované formátování relativních časů, například „včera“, aniž by došlo ke snížení výkonu. Verze 7.1 také podporuje GlobalThis návrh, poskytující univerzální mechanismus pro přístup k globálnímu objektu i v přísných funkcích nebo modulech, bez ohledu na platformu.
  • Pro formát bytecode WebAssembly postMessage je podporován pro moduly. Toto chování je určeno pro webové pracovníky a není rozšířeno na scénáře mezi procesy.

Předchozí verze: Co je nového v Google V8 verze 7.0

Října 2018 verze V8 verze 7.0 zobrazuje náhledy vláken WebAssembly, které poskytují primitivum pro paralelní výpočet. Chcete-li používat vlákna v prohlížeči Chrome, který používá verzi V8, vývojáři ji mohou povolit prostřednictvím chrome: // flags / # enable-webassembly-threads nebo se zaregistrujte na Origin Trial a experimentujte s novými webovými funkcemi. WebAssembly, aka Wasm, umožňuje kompilaci kódu napsaného v různých jazycích pro spuštění na webu.

Mezi další nové funkce verze V8 7.0 patří:

  • Pro JavaScript je popis vlastnost je přidána do prototyp, poskytující ergonomičtější způsob přístupu k popisu. Taky, Pole. Prototyp. Třídit ve verzi 7.0 bude stabilní.
  • Rozšíření integrovaných integrovaných modulů, které šetří paměť sdílením generovaného kódu napříč několika izoláty. V8 verze 6.9 umožňovala vestavění architektury X64, zatímco verze 7.0 je rozšiřuje na zbývající platformy kromě IA-32.

Předchozí verze: Co je nového v Google V8 verze 6.9

Září 2018 verze V9 verze 6.9 se zaměřuje na vylepšení paměti a výkonu pro JavaScriptový engine Google.

Pro úsporu paměti nabízí verze 6.9 integrované integrované počítače pro počítače s procesorem x64. Jedná se o funkce sdílené všemi izoláty a vložené do samotného binárního souboru namísto kopírování do haldy JavaScriptu, takže v paměti existují pouze jednou bez ohledu na to, kolik izolátů běží. Návrháři V8 zaznamenali průměrné 9procentní zmenšení velikosti haldy na 10 000 nejlepších webech na počítačích x64. Podpora dalších platforem bude následovat v pozdějších verzích.

Kvůli výkonu V8 verze 6.9 zkracuje doby pozastavení uvolňování paměti Mark-Compact vylepšením WeakMap zpracovává se. Souběžné a přírůstkové značení nyní lze zpracovat WeakMaps. Dříve byla tato práce provedena v závěrečné atomové pauze sběru odpadu Mark-Compact. Garbage collection nyní také více pracuje souběžně se zkrácením doby pauzy.

Pro výkon DataView metody byly znovu implementovány ve V8 Torque, což šetří nákladné volání C ++ ve srovnání s předchozí implementací za běhu. Také volání na DataView metody jsou nyní vloženy při kompilaci JavaScriptu do kompilátoru optimalizujícího TurboFan. To poskytuje lepší špičkový výkon pro horký kód.

V8 verze 6.9 také obsahuje Liftoff, základní kompilátor pro formát přenosného kódu WebAssembly. Ve výchozím nastavení je povoleno a je určeno ke zkrácení časů spuštění aplikací založených na WebAssembly generováním kódu co nejrychleji. Kvalita samotného kódu je pro Liftoff sekundární prioritou, přičemž kód bude nakonec znovu zkompilován kompilátorem TurboFan V8.

Liftoff byl vyvinut za účelem řešení problému, kdy zadní část procesu kompilace pro TurboFan spotřebovala spoustu času a paměti, což snížilo výkon kódu WebAssembly. Liftoff se vyhne režii času a paměti mezilehlé reprezentace a generuje strojový kód jediným průchodem přes bytecode funkce WebAssembly. Liftoff a Turbofan poskytují V8 dvě úrovně kompilace, přičemž Liftoff je základní kompilátor pro rychlé spuštění a TurboFan poskytuje optimalizaci výkonu.

Google také plánuje další zlepšení doby spouštění, snížení spotřeby paměti a zvýšení výhod programu Liftoff pro více uživatelů. Tyto plány zahrnují porty k procesorům ARM pro použití na mobilních zařízeních. Liftoff v současné době funguje pouze na 32bitových a 64bitových platformách Intel. Mezi další zvažovaná vylepšení patří:

  • Implementace dynamického navýšení úrovně pro mobilní zařízení, aby se přizpůsobila nižšímu objemu paměti na těchto zařízeních. Experimenty probíhají s kombinací líné kompilace s Liftoff a dynamickým vrstvením horkých funkcí v TurboFan.
  • Zlepšení výkonu generování kódu Liftoff a také vylepšení generovaného kódu.

Předchozí verze: Co je nového ve verzi V8 verze 6.8

Google V8 verze 6.8, vydaná v červenci 2018, se zaměřuje na výkon a využití paměti.

Výkon byl zvýšen vylepšeními destrukce pole. Optimalizační kompilátor nevytvářel ideální kód pro destrukci pole, takže stavitelé V8 zablokovali únikovou analýzu, aby vyloučili dočasné přidělení, díky čemuž byla destrukce pole s dočasným polem tak rychlá jako posloupnost přiřazení.

Nová implementace Object.assign zvyšuje výkon díky implementaci rychlé cesty pro JavaScript.

Výkon pro TypedArrays byl zvýšen v případech, kdy se třídění provádí pomocí srovnávací funkce.

Mezi další nové funkce verze V8 verze 6.8 patří:

  • Chcete-li zlepšit rychlost provádění s přenosným formátem kódu WebAssembly, mohou vývojáři na platformách Linux x64 použít kontrolu hranic založených na trapech, optimalizaci správy paměti.
  • Spotřeba paměti SFI (SharedFunctionInfo) byla snížena kompresí a odstraněním nepotřebných polí.
  • Aby se zlepšily možnosti paměti, byla narušena závislost na SFI, ve kterých byly SFI zbytečně udržovány naživu, což vedlo k riziku úniku paměti.

Předchozí verze: Co je nového ve V8 verze 6.7

Google V8 JavaScriptengine získává vylepšení jazykových funkcí a zabezpečení s větví verze 6.7, která je nyní v produkčním vydání.

Motor V8 6.7 má BigInt podpora povolena ve výchozím nastavení. Očekává se v budoucí verzi ECMAScript,BigInts sloužit jako numerický primitiv v JavaScriptu k reprezentaci celých čísel s libovolnou přesností. S BigInt, je možné provádět celočíselnou aritmetiku bez přetečení. BigInt může sloužit jako základ eventuálu BigDecimal implementace, užitečná pro reprezentaci peněžních částek s desetinnou přesností.

Verze V8 6.7 obsahuje také další zmírnění zranitelností postranního kanálu, jejichž cílem je zabránit úniku informací do nedůvěryhodného kódu pro JavaScript a WebAssembly.

Předchozí verze: Co je nového ve verzi V6 verze 6.6

Verze 6.6 enginu JavaScript V8 společnosti Google se zaměřuje na funkce jazyka JavaScript a možnosti ukládání kódu do mezipaměti.

Pro JavaScript, Function.prototype.toString () vrací přesné řezy textu zdrojového kódu, včetně mezer a komentářů. V8 verze 6.6 také implementuje String.prototype.trimStart () a String.prototype.trimEnd (). Tato schopnost byla k dispozici prostřednictvím nestandardních trimLeft () a trimRight () metody, které zůstávají jako aliasy nových metod umožňujících zpětnou kompatibilitu.

V řetězcových literálech lze navíc použít symboly oddělovačů řádků a odstavců, což odpovídá JSON. Dříve se s nimi zacházelo jako s ukončovacími řádky v řetězcových literálech a jejich použití mělo za následek SyntaxError výjimku.

The Pole. Prototyp. Hodnoty metoda dává polím stejné iterační rozhraní jako ECMAScript 2015 Mapa a Soubor sbírky. Ty mohou být vzájemně ovlivňovány klíče,hodnotynebo záznamů voláním metody se stejným názvem. Tato změna může být nekompatibilní s existujícím kódem JavaScriptu; vývojáři, kteří najdou na webu podivné nebo poškozené chování, se mohou pokusit tuto funkci deaktivovat pomocí chrome: // flags / # enable-array-prototype-values.

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