software - vergleich javascript typescript




Leistung der Schlüsselsuche im JavaScript-Objekt (2)

Ich habe gerade diese Frage gelesen: Gibt es Wörterbücher in Javascript wie Python?

Eine der Antworten besagt, dass Sie JavaScript-Objekte wie Python-Wörterbücher verwenden können. Ist das wahr? Was ist die Leistung einer Schlüsselsuche in einem Objekt? Ist es O (1)? Fügt ein Schlüssel zum Objekt auch konstante Zeit hinzu (Hashing)?


Die V8-Designdokumente implizieren, dass Lookups mindestens so schnell, wenn nicht schneller sein werden:

Die meisten JavaScript-Engines verwenden eine wörterbuchähnliche Datenstruktur als Speicher für Objekteigenschaften - jeder Zugriff auf Eigenschaften erfordert eine dynamische Suche, um den Speicherort der Eigenschaft im Speicher aufzulösen. Dieser Ansatz macht den Zugriff auf Eigenschaften in JavaScript in der Regel wesentlich langsamer als den Zugriff auf Instanzvariablen in Programmiersprachen wie Java und Smalltalk. In diesen Sprachen befinden sich die Instanzvariablen aufgrund des festen Objektlayouts, das durch die Klasse des Objekts definiert wird, in festen Offsets, die vom Compiler festgelegt werden. Der Zugriff ist einfach eine Frage des Ladens oder Speicherns eines Speichers, wobei oft nur ein einziger Befehl erforderlich ist.

Um den Zeitaufwand für den Zugriff auf JavaScript-Eigenschaften zu reduzieren, verwendet V8 nicht die dynamische Suche, um auf Eigenschaften zuzugreifen. Stattdessen erstellt V8 dynamisch verborgene Klassen hinter den Kulissen. [...] In V8 ändert ein Objekt seine versteckte Klasse, wenn eine neue Eigenschaft hinzugefügt wird.

Es klingt, als würde das Hinzufügen eines neuen Schlüssels aufgrund der versteckten Klassenerstellung etwas langsamer sein.


Ja, Sie können davon ausgehen, dass das Hinzufügen eines Schlüssels und dessen späteres Verwenden für den Zugriff tatsächlich konstante Zeitoperationen sind.

Unter der Haube kann die JS-Engine einige Techniken anwenden, um nachfolgende Nachschlagevorgänge zu optimieren, aber für die Zwecke irgendeines Algorithmus können Sie O (1) annehmen.





hash