javascript / expert
Snippet
Optimierung von V8 Hidden Classes und Object Shapes
V8 verwendet 'Hidden Classes', um den Zugriff auf Eigenschaften zu optimieren. Wenn Objekte dieselbe Struktur und Initialisierungsreihenfolge teilen, kann V8 'Inline Caching' (IC) nutzen, um auf Eigenschaften in Maschinencode-Geschwindigkeit zuzugreifen. Das dynamische Hinzufügen von Eigenschaften oder das Ändern ihrer Reihenfolge bricht diese Optimierung auf und führt zu langsameren 'Dictionary Mode'-Lookups.
snippet.js
1
2
3
4
5
6
7
8
9
10
11
12
function Point(x, y) {this.x = x;this.y = y;}const p1 = new Point(1, 2);const p2 = new Point(3, 4);// Optimization: Keep property initialization order consistent// This ensures p1 and p2 share the same 'Hidden Class' (Shape)p2.z = 5; // p2 now transitions to a new shape, becoming 'polymorphic'
nodejs
Erklärung
1
this.x = x; this.y = y;
Initialisiert Eigenschaften in einer festen Reihenfolge, um eine stabile Hidden Class zu erstellen.
2
p2.z = 5;
Erzwingt einen Shape-Übergang, wodurch p2 nicht mehr mit dem optimierten Code für p1 kompatibel ist.