Nach this answer, in V8 gibt es zwei Modi kann ein Objekt Wörterbuch Modus und Fast-Modus haben-.
Objekte befinden sich ursprünglich im schnellen Modus, in dem keine Hash-Map - keine Berechnung - für den Zugriff auf Eigenschaften erforderlich ist. Es speichert Objekte wie Strukturen in C. Erst wenn Sie beginnen, ein "Objekt so zu verwenden, als wäre es eine Hash-Tabelle, wird es in einen Hash-Tabellen-Dictionary-Modus umgewandelt." Sobald dies geschieht, erhalten Sie die Leistungseinbuße einer Hash-Map, die hinter den Kulissen für den Zugriff auf Eigenschaften verwendet wird.
Zum Beispiel:
// running node with `--allow-natives-syntax` flag
var obj = { a: true, b: false };
%HasFastProperties(obj); // true (Fast mode)
delete obj.a;
%HasFastProperties(obj); // false (Dictionary mode)
Oder:
var obj = { a: true, b: false };
%HasFastProperties(obj); // true (Fast mode)
// add lots of properties
for (var i = 0; i < 100; i++) {
obj["prop" + i] = i;
}
%HasFastProperties(obj); // false (Dictionary mode)
Der Grund ist es in Wörterbuchmodus geht, wenn dies zu tun eine Performance-Optimierung ist. Das Hinzufügen/Entfernen von Eigenschaften im Wörterbuchmodus ist schneller als der Schnellmodus und daher optimiert die V8-Engine die Struktur anstelle des Eigenschaftszugriffs, wenn sie dieses Verhalten erkennt (Read more here).
Dies ist wahrscheinlich nicht auf Programmiersprachenebene gemeint. Aber wie benutzt du die Sprache? –
keine Zeit für eine vollständige Antwort, aber die JIT kann einige Objekte in Code, wo Eigenschaften nachschlagen sehr effizient fast wie C-Strukturen und es ist O (1). Außer wenn es nicht möglich ist, wenn stattdessen eine echte Hash-Tabelle als Backing Store verwendet wird. – Alnitak