Zum Hauptinhalt springen

38 Posts getaggt mit "Internals"

Alle Tags anzeigen

Beschleunigung von V8-Regulären Ausdrücken

· 4 Minuten Lesezeit
Jakob Gruber, Softwareingenieur für reguläre Ausdrücke

Dieser Blogbeitrag behandelt die jüngste Migration der eingebauten Funktionen von regulären Ausdrücken in V8 von einer in sich gehosteten JavaScript-Implementierung auf eine, die direkt in unsere neue Code-Generierungsarchitektur auf Basis von TurboFan integriert ist.

Zündung des Ignition-Interpreters

· 4 Minuten Lesezeit
Ross McIlroy, V8 Ignition Jump Starter

V8 und andere moderne JavaScript-Engines erzielen ihre Geschwindigkeit durch Just-in-Time (JIT)-Kompilierung von Skripten in nativen Maschinencode unmittelbar vor der Ausführung. Der Code wird zunächst von einem Baseline-Compiler kompiliert, der nicht optimierten Maschinencode schnell generieren kann. Der kompilierte Code wird während der Laufzeit analysiert und optional dynamisch mit einem fortschrittlicheren optimierenden Compiler für maximale Leistung erneut kompiliert. In V8 weist diese Skriptausführungspipeline eine Vielzahl von Sonderfällen und Bedingungen auf, die eine komplexe Mechanik erfordern, um zwischen dem Baseline-Compiler und zwei optimierenden Compilern, Crankshaft und TurboFan, zu wechseln.

Jank-Busters Teil Zwei: Orinoco

· 6 Minuten Lesezeit
die Jank-Busters: Ulan Degenbaev, Michael Lippautz und Hannes Payer

In einem früheren Blogpost haben wir das Problem von Rucklern vorgestellt, die durch Garbage Collection verursacht werden und ein flüssiges Surfen beeinträchtigen. In diesem Blogpost stellen wir drei Optimierungen vor, die die Grundlage für einen neuen Garbage Collector in V8 mit dem Codenamen Orinoco bilden. Orinoco basiert auf der Idee, dass die Implementierung eines überwiegend parallelen und gleichzeitig arbeitenden Garbage Collectors ohne strikte Generationengrenzen die Ruckler bei der Garbage Collection und den Speicherverbrauch reduziert, während gleichzeitig eine hohe Durchsatzrate erhalten bleibt. Statt Orinoco als separaten Garbage Collector hinter einem Flag zu implementieren, haben wir uns entschieden, die Funktionen von Orinoco schrittweise auf die V8 Hauptentwicklung einzuführen, um den Benutzern sofort Vorteile zu bieten. Die drei in diesem Beitrag diskutierten Funktionen sind paralleles Kompaktieren, parallele Verarbeitung des Remembered Sets und schwarze Allokation.

V8-Extras

· 6 Minuten Lesezeit
Domenic Denicola ([@domenic](https://twitter.com/domenic)), Streams-Zauberer

V8 implementiert eine große Teilmenge der eingebauten Objekte und Funktionen der JavaScript-Sprache in JavaScript selbst. Beispielsweise ist unsere Promises-Implementierung in JavaScript geschrieben. Solche eingebauten Objekte nennt man self-hosted. Diese Implementierungen sind in unserem Startup-Snapshot enthalten, sodass neue Kontexte schnell erstellt werden können, ohne die selbst gehosteten Built-ins zur Laufzeit einrichten und initialisieren zu müssen.

Benutzerdefinierte Start-Snapshots

· 3 Minuten Lesezeit
Yang Guo ([@hashseed](https://twitter.com/hashseed)), Software Engineer und Lieferant von Motorvorwärmern

Die JavaScript-Spezifikation enthält viele eingebaute Funktionen, von Mathematikfunktionen bis hin zu einer voll ausgestatteten regulären Ausdrucksengine. Jede neu erstellte V8-Umgebung hat diese Funktionen von Anfang an verfügbar. Damit dies funktioniert, müssen das globale Objekt (z. B. das Fensterobjekt in einem Browser) und alle eingebauten Funktionen eingerichtet und initialisiert werden, um in den V8-Heap aufgenommen zu werden, sobald die Umgebung erstellt wird. Es dauert eine ganze Weile, dies von Grund auf neu zu tun.

Kostenlose Speicherbereinigung

· 9 Minuten Lesezeit
Hannes Payer und Ross McIlroy, Idle Garbage Collectors

Die JavaScript-Performance bleibt einer der zentralen Werte von Chrome, insbesondere wenn es darum geht, eine flüssige Benutzererfahrung zu ermöglichen. Ab Chrome 41 nutzt V8 eine neue Technik, um die Reaktionsfähigkeit von Webanwendungen zu erhöhen, indem aufwendige Speicherverwaltungsoperationen in kleinen, sonst ungenutzten Leerlaufzeiten verborgen werden. Dadurch können Webentwickler mit flüssigerem Scrolling und geschmeidigen Animationen mit deutlich weniger Rucklern aufgrund von Speicherbereinigung rechnen.

Code-Caching

· 2 Minuten Lesezeit
Yang Guo ([@hashseed](https://twitter.com/hashseed)), Software Engineer

V8 verwendet die Just-in-Time-Kompilierung (JIT), um JavaScript-Code auszuführen. Das bedeutet, dass ein Skript unmittelbar vor seiner Ausführung analysiert und kompiliert werden muss — was zu erheblichem Aufwand führen kann. Wie wir kürzlich angekündigt haben, ist Code-Caching eine Technik, die diesen Aufwand verringert. Wenn ein Skript zum ersten Mal kompiliert wird, werden Cache-Daten erzeugt und gespeichert. Das nächste Mal, wenn V8 dasselbe Skript kompiliert, auch in einer anderen V8-Instanz, kann es die Cache-Daten nutzen, um das Kompilierungsergebnis erneut zu erstellen, anstatt von Grund auf zu kompilieren. Dadurch wird das Skript deutlich schneller ausgeführt.