Zum Hauptinhalt springen

38 Posts getaggt mit "Internals"

Alle Tags anzeigen

Hintergrundkompilierung

· 5 Minuten Lesezeit
[Ross McIlroy](https://twitter.com/rossmcilroy), Verteidiger des Hauptthreads

TL;DR: Ab Chrome 66 kompiliert V8 JavaScript-Quellcode in einem Hintergrundthread, wodurch die Zeit, die auf dem Hauptthread für die Kompilierung verbracht wird, auf typischen Websites zwischen 5% und 20% reduziert wird.

Hintergrund

Seit Version 41 unterstützt Chrome das Parsen von JavaScript-Quelldateien in einem Hintergrundthread über die V8-API StreamedSource. Dadurch kann V8 mit dem Parsen von JavaScript-Quellcode beginnen, sobald Chrome das erste Datenstück der Datei aus dem Netzwerk heruntergeladen hat, und parallel weiter parsen, während Chrome die Datei über das Netzwerk streamt. Dies kann erhebliche Ladezeitverbesserungen bieten, da V8 fast mit dem Parsen des JavaScripts fertig sein kann, wenn der Download der Datei abgeschlossen ist.

Von JS zum DOM und zurück verfolgen

· 5 Minuten Lesezeit
Ulan Degenbaev, Alexei Filippov, Michael Lippautz und Hannes Payer — die Gemeinschaft des DOM

Das Debuggen von Speicherlecks in Chrome 66 ist jetzt deutlich einfacher geworden. Die Chrome DevTools können jetzt C++ DOM-Objekte verfolgen und schnappschussartig erfassen sowie alle erreichbaren DOM-Objekte von JavaScript mit ihren Referenzen anzeigen. Diese Funktion ist einer der Vorteile des neuen C++-Tracing-Mechanismus des V8-Garbage-Collectors.

Lazy-Deserialisierung

· 7 Minuten Lesezeit
Jakob Gruber ([@schuay](https://twitter.com/schuay))

TL;DR: Die Lazy-Deserialisierung wurde kürzlich standardmäßig in V8 v6.4 aktiviert und reduziert den Speicherverbrauch von V8 durchschnittlich um über 500 KB pro Browser-Tab. Lesen Sie weiter, um mehr zu erfahren!

Einführung in V8-Snapshots

Doch zunächst wollen wir einen Schritt zurücktreten und uns ansehen, wie V8 Heap-Snapshots verwendet, um die Erstellung neuer Isolates (die grob einem Browser-Tab in Chrome entsprechen) zu beschleunigen. Mein Kollege Yang Guo gab eine gute Einführung dazu in seinem Artikel über benutzerdefinierte Start-Snapshots:

Orinoco: Müllentsorgung jüngerer Generation

· 8 Minuten Lesezeit
Ulan Degenbaev, Michael Lippautz und Hannes Payer, Freunde von [TSAN](https://github.com/google/sanitizers/wiki/ThreadSanitizerCppManual)

JavaScript-Objekte in V8 werden auf einem Heap gespeichert, der vom Müllsammler von V8 verwaltet wird. In früheren Blogposts haben wir bereits darüber gesprochen, wie wir die Pausenzeiten der Müllsammlung reduzieren (mehr als einmal) und den Speicherverbrauch verringern. In diesem Blogbeitrag stellen wir den parallelen Scavenger vor, eine der neuesten Funktionen von Orinoco, V8s überwiegend nebenläufigem und parallel arbeitendem Müllsammler, und diskutieren Designentscheidungen sowie alternative Ansätze, die wir auf dem Weg implementiert haben.

Elementarten in V8

· 15 Minuten Lesezeit
Mathias Bynens ([@mathias](https://twitter.com/mathias))
hinweis

Hinweis: Wenn Sie es bevorzugen, eine Präsentation anzusehen, anstatt Artikel zu lesen, genießen Sie das folgende Video!

JavaScript-Objekte können beliebige Eigenschaften haben, die ihnen zugeordnet sind. Die Namen von Objekteigenschaften können jedes Zeichen enthalten. Einer der interessanten Fälle, die eine JavaScript-Engine optimieren kann, sind Eigenschaften, deren Namen rein numerisch sind, insbesondere Array-Indizes.

Schnelle Eigenschaften in V8

· 12 Minuten Lesezeit
Camillo Bruni ([@camillobruni](https://twitter.com/camillobruni)), ebenfalls Autor von [„Schnelles `for`-`in`”](/blog/fast-for-in)

In diesem Blogbeitrag möchten wir erklären, wie V8 intern JavaScript-Eigenschaften verarbeitet. Aus JavaScript-Sicht sind nur wenige Unterscheidungen für Eigenschaften notwendig. JavaScript-Objekte verhalten sich meist wie Wörterbücher, mit Zeichenketten als Schlüsseln und beliebigen Objekten als Werten. Die Spezifikation behandelt jedoch während der Iteration ganzzahlig indizierte Eigenschaften anders als andere Eigenschaften. Abgesehen davon verhalten sich die verschiedenen Eigenschaften im Wesentlichen gleich, unabhängig davon, ob sie ganzzahlig indiziert sind oder nicht.

Einführung von Ignition und TurboFan

· 6 Minuten Lesezeit
das V8-Team

Heute freuen wir uns, die Einführung einer neuen JavaScript-Ausführungspipeline für V8 v5.9 bekannt zu geben, die in Chrome Stable in v59 verfügbar sein wird. Mit der neuen Pipeline erzielen wir große Leistungsverbesserungen und erhebliche Speicherersparnisse bei realen JavaScript-Anwendungen. Wir werden die Zahlen am Ende dieses Beitrags genauer diskutieren, aber zuerst werfen wir einen Blick auf die Pipeline selbst.

Schnelles `for`-`in` in V8

· 13 Minuten Lesezeit
Camillo Bruni ([@camillobruni](http://twitter.com/camillobruni))

for-in ist ein weit verbreitetes Sprachmerkmal, das in vielen Frameworks vorkommt. Trotz seiner Allgegenwärtigkeit ist es aus Implementierungsperspektive eines der obskureren Sprachkonstrukte. V8 hat große Anstrengungen unternommen, um dieses Merkmal so schnell wie möglich zu machen. Im Laufe des letzten Jahres wurde for-in vollständig spec-konform und je nach Kontext bis zu 3-mal schneller.

Helfen Sie uns, die Zukunft von V8 zu testen!

· 3 Minuten Lesezeit
Daniel Clifford ([@expatdanno](https://twitter.com/expatdanno)), Originaler Münchner V8-Brauer

Das V8-Team arbeitet derzeit an einer neuen Standard-Compiler-Pipeline, die uns helfen wird, zukünftige Geschwindigkeitssteigerungen für realistische JavaScript-Anwendungen zu erreichen. Sie können die neue Pipeline schon heute in Chrome Canary testen, um uns zu helfen sicherzustellen, dass es keine Überraschungen gibt, wenn wir die neue Konfiguration auf allen Chrome-Kanälen einführen.