Wat is nieuw in Google's V8 JavaScript-engine versie 7

De bètaversie V8 versie 7.4 is nu beschikbaar, met het potentieel om de voetafdruk van de engine uit te breiden naar platforms zoals Apple iOS. V8 is de open source JavaScript- en WebAssembly-engine van Google voor de Chrome-browser. Het is een nietje in zowel de Chrome-browser als de Node.js JavaScript-runtime.

Waar Google V8 te downloaden

U kunt de productieversie van Google V8 downloaden vanuit de Chromium V8-opslagplaats.

Toekomstige versie: Wat is er nieuw in V8 versie 7.4

Met de productieversie die in april 2019 moet verschijnen, heeft Google V8 beta 7.4 de volgende nieuwe functies:

  • JIT-loze V8, waarin JavaScript-uitvoering wordt ondersteund zonder uitvoerbaar geheugen tijdens runtime toe te wijzen. Hierdoor kan V8 worden uitgebreid naar platforms zoals Apple iOS, smart-tv's en gameconsoles. De standaardconfiguratie van V8 is gebaseerd op de mogelijkheid om uitvoerbaar geheugen tijdens runtime toe te wijzen en te wijzigen. Maar er zijn situaties waarin het wenselijk kan zijn om de engine te laten draaien zonder uitvoerbaar geheugen toe te wijzen, zoals platforms die schrijftoegang tot niet-uitvoerbaar geheugen hebben verboden voor niet-geprivilegieerde toepassingen, waaronder iOS. Het weigeren van schrijfbewerkingen naar uitvoerbaar geheugen vermindert ook het aanvalsoppervlak van de toepassing voor exploits. Met de JIT-loze modus schakelt V8 over naar een interpreter-only modus voor JavaScript; WebAssembly ondersteunt deze modus momenteel niet. JIT-loze modus komt echter met een prestatieverbinding.
  • WebAssembly Threads / Atomics zijn nu ingeschakeld op niet-Android-besturingssystemen. Deze stap maakt het gebruik van meerdere cores via WebAssembly mogelijk, waardoor nieuwe, rekenintensieve toepassingen op internet mogelijk worden.
  • Om de prestaties te verbeteren, slaat Versie 7.4 in sommige gevallen de aanpassing van argumenten over, waardoor de call-overhead met 60 procent wordt verminderd.
  • De prestaties zijn verbeterd voor het aanroepen van native accessors, dit zijn DOM-accessors.
  • De prestaties van de Preparser zijn verbeterd door een ontdubbeling met eigenschapsnamen te verwijderen. Bovendien is er een prestatieprobleem opgelost dat te maken had met aangepaste UTF-8-decodering die door de bronstroom werd gebruikt.
  • Om geheugenoverhead te verminderen, is ondersteuning geïmplementeerd voor het leegmaken van gecompileerde bytecodes van functies tijdens garbage collection als ze niet recentelijk zijn uitgevoerd.
  • Om velden van privéklassen te ondersteunen, kunnen ontwikkelaars een veld als privé markeren door het vooraf te laten gaan met het #voorvoegsel.

Waar download je de V8 7.4 bèta

U kunt de V8-bèta downloaden van de Chromium Git-opslagplaats van Google.

Huidige versie: Wat is nieuw in V8 versie 7.3

Nieuwe functies in V8 7.3 zijn onder meer:

  • De --async-stack-tracesvlag is standaard ingeschakeld.
  • Dankzij kosteloze asynchrone stacktraces is het eenvoudiger om problemen in de productie te diagnosticeren met asynchrone code; de stackeigenschap die meestal naar logbestanden en services wordt gestuurd, geeft nu meer inzicht in problemen.
  • Een snellere await, met de --harmony-await-optimizationvlag standaard ingeschakeld. Dit is een voorwaarde voor --async-stack-traces.
  • Snellere start voor WebAssembly via optimalisaties. Voor de meeste workloads is de compilatie verbeterd met 15 tot 25 procent.
  • JavaScript-functies zoals fromEntries()een API om het omgekeerde uit te voeren Object.entries, en  String.prototype.Matchalleen API om het gemakkelijker te maken om globale of plakkerige reguliere expressies toe te passen op een string en door alle overeenkomsten te herhalen.

Huidige versie: Wat is nieuw in Google V8 versie 7.2

Versie 7.2 van V8 van januari 2019 verbetert JavaScript-parsing, het binaire formaat WebAssembly en het geheugen.

Om de parsersnelheid te verbeteren, bevat V8 versie 7.2 wat Google de snelste JavaScript-parser ooit noemt, wat resulteert in het sneller laden van pagina's en responsievere pagina's. Sinds V8 versie 7.0 is de snelheid van het parseren van het bureaublad met ongeveer 30 procent verbeterd, zegt Google.

Wat geheugen betreft, worden ingebouwde ingebouwde functies die geheugen besparen door gegenereerde code over meerdere isolaten te delen, nu ondersteund en standaard ingeschakeld op de IA32-architectuur.

Voor WebAssembly heeft V8 7.2 verbeteringen in het genereren van code, waaronder het inschakelen van knooppuntsplitsing in de optimaliserende compilerplanner en lusrotatie aan de achterkant. Ook is de caching van de wrapper verbeterd en zijn er aangepaste wrappers geïntroduceerd om de overhead te verminderen bij het aanroepen van geïmporteerde JavaScript-wiskundige functies.

Ontwerpwijzigingen aan de register-allocator verbeteren de prestaties voor codepatronen die in een latere release zullen verschijnen. Trap-handlers in Versie 7.2 verbeteren ook de doorvoer van WebAssembly-code. Ze zijn geïmplementeerd op Windows, MacOS en Linux. In Chromium zijn ze ingeschakeld op Linux, met MacO's en Windows om te volgen wanneer de stabiliteit is bevestigd. Volgens plannen moeten ze ook beschikbaar zijn op Android.

Andere nieuwe functies in V8 7.2 zijn onder meer:

  • De prestaties van spread-elementen zijn verbeterd wanneer deze zich aan de voorkant van de array bevinden.
  • Een snellere async/ await implementatie is standaard ingeschakeld. De wijziging kan worden samengevoegd in de officiële ECMAScript-specificatie.
  • Zero-coast async-stacktraces verrijken de stackeigenschap met asynchrone oproepframes. Deze mogelijkheid is beschikbaar achter de --async-stack-tracesopdrachtregelvlag.
  • Ondersteuning voor openbare klassevelden, waardoor de JavaScript-syntaxis wordt uitgebreid voor vereenvoudiging.
  • Het ListFormatvoorstel, voor het lokaliseren van de opmaak van lijsten.
  • stringify voert nu escape-reeksen uit voor alleenstaande surrogaten, waardoor de uitvoer geldige Unicode is.

Vorige versie: Wat is er nieuw in Google V8 versie 7.1

Versie 7.1 van V8 van november 2018 biedt verbeteringen in geheugen en prestaties, samen met verbeteringen voor zowel JavaScript als het binaire WebAssembly-formaat. Voor het geheugen zijn nu bytecodes voor de interpreter ingebed in het binaire bestand, wat gemiddeld ongeveer 200 KB per isolaat bespaart. Om de prestaties te verbeteren, is de ontsnappingsanalyse in de TurboFan-compiler verbeterd om lokale functiecontexten te verwerken voor functies van hogere orde, wanneer variabelen uit de omringende context ontsnappen naar een lokale sluiting. Met ontsnappingsanalyse wordt scalaire vervanging uitgevoerd voor objecten die lokaal zijn voor een optimalisatie-eenheid.

Andere nieuwe functies in V8 versie 7.1:

  • Voor JavaScript maakt de RelativeTimeformatAPI in de upgrade gelokaliseerde opmaak van relatieve tijden mogelijk, zoals 'gisteren', zonder in te boeten aan prestaties. Versie 7.1 ondersteunt ook het GlobalThisvoorstel en biedt een universeel mechanisme om toegang te krijgen tot het globale object, zelfs in strikte functies of modules, ongeacht het platform.
  • Voor WebAssembly bytecode-indeling, postMessagewordt ondersteund voor modules. Dit gedrag is bedoeld voor webwerkers en wordt niet uitgebreid naar scenario's voor meerdere processen.

Vorige versie: Wat is er nieuw in Google V8 versie 7.0

V8 Versie 7.0 van oktober 2018 geeft voorbeelden van WebAssembly-threads, die een primitief bieden voor parallelle berekeningen. Om threads te gebruiken in de Chrome-browser, die V8 gebruikt, kunnen ontwikkelaars dit inschakelen via chrome://flags/#enable-webassembly-threadsof zich aanmelden voor een Origin Trial, om te experimenteren met nieuwe webfuncties. WebAssembly, oftewel Wasm, maakt het mogelijk om code te compileren die in verschillende talen is geschreven om op internet te draaien.

Andere nieuwe functies in V8 7.0 zijn onder meer:

  • Voor JavaScript is de descriptioneigenschap toegevoegd prototype, wat een meer ergonomische manier biedt om toegang te krijgen tot de beschrijving. Wordt Array.prototype.sortook stabiel in versie 7.0.
  • Uitbreiding van ingebouwde ingebouwde ins, die geheugen besparen door gegenereerde code over meerdere isolaten te delen. V8 Versie 6.9 heeft ingebouwde ingebouwde functies op de X64-architectuur ingeschakeld, terwijl Versie 7.0 deze uitbreidt naar de overige platforms behalve IA-32.

Vorige versie: Wat is er nieuw in Google V8 versie 6.9

V8 Versie 6.9 van september 2018 richt zich op geheugen- en prestatieverbeteringen voor de JavaScript-engine van Google.

Om geheugen te besparen, biedt versie 6.9 ingebouwde ingebouwde functies voor x64-computers. Dit zijn functies die door alle isolaten worden gedeeld en in het binaire bestand zelf worden ingebed in plaats van naar de JavaScript-heap te worden gekopieerd, waardoor ze slechts één keer in het geheugen bestaan, ongeacht hoeveel isolaten er actief zijn. De ontwerpers van V8 hebben de heap-grootte gemiddeld met 9 procent verkleind op de top 10.000 websites op x64-computers. Ondersteuning voor andere platforms volgt in latere releases.

Voor prestaties verkort V8 versie 6.9 de Mark-Compact garbage collection-pauzetijden door de WeakMapverwerking te verbeteren . Gelijktijdige en incrementele markering kan nu worden verwerkt WeakMaps. Eerder werd dit werk gedaan in de laatste atoompauze van Mark-Compact garbage collection. De garbage collection doet nu ook meer werk parallel aan kortere pauzetijden.

Voor prestaties zijn de DataViewmethoden opnieuw geïmplementeerd in V8 Torque, waardoor een dure aanroep naar C ++ is bespaard in vergelijking met de vorige runtime-implementatie. Ook zijn de aanroepen van DataViewmethoden nu inline bij het compileren van JavaScript in de TurboFan-optimaliserende compiler. Dit zorgt voor betere piekprestaties voor hot code.

V8 Versie 6.9 bevat ook Liftoff, een basiscompiler voor het draagbare codeformaat WebAssembly. Het is standaard ingeschakeld en bedoeld om de opstarttijden voor op WebAssembly gebaseerde apps te verkorten door zo snel mogelijk code te genereren. De kwaliteit van de code zelf is een secundaire prioriteit voor Liftoff, waarbij de code uiteindelijk opnieuw zal worden gecompileerd door V8's TurboFan-compiler.

Liftoff is ontwikkeld om een ​​probleem aan te pakken waarbij de achterkant van het compilatieproces voor TurboFan veel tijd en geheugen in beslag nam, waardoor de prestaties van de WebAssembly-code afnamen. Lancering vermijdt de tijd- en geheugenoverhead van tussenliggende representatie, door machinecode te genereren in een enkele passage over de bytecode van een WebAssembly-functie. Liftoff en Turbofan geven V8 twee compilatielagen, waarbij Liftoff een basiscompiler is voor snel opstarten en TurboFan voor optimalisatie van de prestaties.

Google is ook van plan de opstarttijd verder te verbeteren, het geheugengebruik te verminderen en de voordelen van Liftoff naar meer gebruikers te brengen. Deze plannen omvatten poorten naar ARM-processors, voor gebruik op mobiele apparaten. Lancering werkt momenteel alleen op Intel 32- en 64-bits platforms. Andere overwogen verbeteringen zijn:

  • Implementatie van dynamische tier-up voor mobiele apparaten om lagere geheugenvolumes op deze apparaten mogelijk te maken. Experimenten gaan door met een combinatie van luie compilatie met Liftoff en dynamische tier-up van hete functies in TurboFan.
  • Verbetering van de prestaties van het genereren van lanceringen en het verbeteren van de gegenereerde code.

Vorige versie: Wat is er nieuw in V8 versie 6.8

Google V8 versie 6.8, uitgebracht in juli 2018, richt zich op prestaties en geheugengebruik.

De prestaties zijn verbeterd door verbeteringen in de vernietiging van de array. De optimaliserende compiler genereerde geen ideale code voor array-destructurering, dus blokkeerden de bouwers van V8 ontsnappingsanalyse om tijdelijke toewijzing te elimineren, waardoor array-destructurering met een tijdelijke array net zo snel werd als een reeks toewijzingen.

Een nieuwe implementatie van Object.assign verbetert de prestaties door implementatie van een snel pad voor JavaScript.

De prestaties voor TypedArrays zijn verbeterd in gevallen waarin het sorteren wordt uitgevoerd met behulp van een vergelijkingsfunctie.

Andere nieuwe functies in V8 versie 6.8 zijn onder meer:

  • Om de uitvoeringssnelheid te verbeteren met het draagbare codeformaat WebAssembly, kunnen ontwikkelaars trap-gebaseerde grenscontrole, een optimalisatie van geheugenbeheer, gebruiken op Linux x64-platforms.
  • Het geheugengebruik van SFI's ( SharedFunctionInfo) is verminderd door compressie en verwijdering van onnodige velden.
  • Ook om de geheugencapaciteiten te verbeteren, is de afhankelijkheid van SFI's verbroken waarbij SFI's onnodig in leven werden gehouden, wat had geleid tot het risico op geheugenlekken.

Vorige versie: Wat is er nieuw in V8 versie 6.7

Google's V8 JavaScript-engine krijgt verbeteringen voor taalfuncties en beveiliging met de versie 6.7-tak, die nu in productierelease is.

De V8 6.7-motor heeft BigIntstandaard ondersteuning ingeschakeld. Verwacht in een toekomstige versie van ECMAScript,  BigIntsdienen als numerieke primitief in JavaScript om gehele getallen met willekeurige precisie weer te geven. Met BigIntis het mogelijk om rekenen met gehele getallen uit te voeren zonder overlopen. BigIntzou kunnen dienen als basis voor een uiteindelijke BigDecimalimplementatie, nuttig om sommen geld met decimale precisie weer te geven.

V8 6.7 bevat ook meer oplossingen voor zijkanaalkwetsbaarheden, bedoeld om informatielekken naar niet-vertrouwde code voor JavaScript en WebAssembly te voorkomen.

Vorige versie: Wat is er nieuw in V8 versie 6.6

Versie 6.6 van Google's V8 JavaScript-engine richt zich op JavaScript-taalfuncties en code-caching-mogelijkheden.

Function.prototype.toString()Retourneert voor JavaScript exacte delen van de broncodetekst, inclusief witruimte en opmerkingen. V8 Versie 6.6 implementeert ook String.prototype.trimStart() and String.prototype.trimEnd(). Deze mogelijkheid was beschikbaar via niet-standaard methoden trimLeft()en trimRight()methoden, die als aliassen van de nieuwe methoden blijven bestaan ​​om achterwaartse compatibiliteit mogelijk te maken.

Bovendien kunnen lijn- en alinea-scheidingstekens worden gebruikt in letterlijke tekenreeksen, waardoor ze overeenkomen met JSON. Voorheen werden deze behandeld als regelterminators in letterlijke tekenreeksen en het gebruik ervan resulteerde in een SyntaxError-uitzondering.

De Array.prototype.values methode geeft arrays dezelfde iteratie-interface als de ECMAScript 2015 Map en Setcollecties. Deze kunnen worden beïnvloed door keys,values of entriesdoor dezelfde methode aan te roepen. Deze wijziging is mogelijk incompatibel met bestaande JavaScript-code; ontwikkelaars die vreemd of gebroken gedrag op een website vinden, kunnen proberen deze functie uit te schakelen via chrome://flags/#enable-array-prototype-values.