Ich habe eine Menge Fragen über den schnellsten Weg zum Zugriff auf Objekteigenschaften gesehen (wie die Verwendung von. vs []), aber ich finde nicht, ob Objekteigenschaften, die höher deklariert sind als Objekte im Objekt, schneller gefunden werden können Literale Syntax.
Ich arbeite mit einem Objekt, das bis zu 40.000 Eigenschaften enthalten kann, von denen jede Array
von Länge 2 ist. Ich benutze es als Wert nach Wert.
Ich weiß, dass vielleicht 5% der Eigenschaften diejenigen sind, die ich am häufigsten abrufen muss. Ist einer der folgenden Punkte für eine höhere Leistung (verringerte Suchzeit) sinnvoll?
Oder gibt es einen besseren Weg?
Ich habe hier eine Performance gemacht: Ссылка
Ich habe im Grunde 40000 Requisiten mit zufälligen Schlüsseln in ein Objekt injiziert, die "ersten" und "letzten" Schlüssel gespeichert und in verschiedenen Tests nachgeschlagen. Das Ergebnis hat mich überrascht, denn der erste Zugriff war 35% langsamer als der Zugriff auf den letzten Eintrag.
Auch ein Objekt mit 5 oder 40000 Einträgen machte keinen nennenswerten Unterschied.
Der Testfall kann wahrscheinlich verbessert werden und ich habe wahrscheinlich etwas verpasst, aber es gibt einen Anfang für Sie.
Hinweis: Ich habe nur chrome
getestetJa, etwas wie "indexOf" sucht von vorne nach hinten. Wenn Sie daher häufigere Elemente in der Liste höher platzieren, werden sie schneller zurückgegeben. Die meisten "grundlegenden" Suchalgorithmen sind grundlegende Suchen von oben nach unten (einfache Sortierung). Zumindest für Arrays.
Wenn Sie so viele Eigenschaften haben, müssen sie berechnet werden, nein? Sie können also die (höchstwahrscheinliche) Berechnung durch eine Integer-Hash-Berechnung ersetzen und dann diesen Hash in einem regulären Array verwenden.
Sie könnten sogar ein einzelnes Array verwenden, indem Sie Werte in den 2 * i-ten, 2 * i + 1-ten Slot eingeben.
Wenn Sie hier ein typisiertes Array verwenden können, tun Sie es und Sie könnten nicht schneller gehen.
Legen Sie die am häufigsten benötigten Eigenschaften am Anfang der Objektliteralsyntax fest?
Nein. Wählen Sie Lesbarkeit über die Leistung. Wenn Sie nur wenige Eigenschaften haben, die ein Literal im Code enthalten, ist das egal. und Sie sollten die Eigenschaften in einer logischen Reihenfolge bestellen.
Die Suche nach Eigenschaften in Objekten basiert normalerweise auf Hash-Maps, und die Position sollte keinen wesentlichen Unterschied ausmachen. Abhängig von der Implementierung des Hashes sind sie möglicherweise vernachlässigbar, aber ich denke, das ist ziemlich zufällig und hängt stark von den angewandten Optimierungen ab. Es sollte nicht wichtig sein.
Wenn # 1 keine Auswirkung hat, sollte ich zwei separate Objekte erstellen, eines mit den häufigsten 5% der Eigenschaften, suchen Sie dieses zuerst, und wenn die Eigenschaft dort nicht gefunden wird, dann sehen Sie sich das Objekt mit allen an weniger häufige Eigenschaften?
Ja. Wenn Sie wirklich riesige Objekte (mit Tausenden von Eigenschaften) haben, ist dies eine gute Idee. Abhängig von der verwendeten Datenstruktur kann die Größe des Objekts die Suchzeit beeinflussen. Wenn Sie also ein kleineres Objekt für die häufigeren Eigenschaften haben, sollte es schneller sein. Es ist möglich, dass für die beiden Objekte unterschiedliche Strukturen gewählt werden, die besser funktionieren als die Einzige - vor allem, wenn Sie vorher wissen, in welches Objekt Sie schauen sollen. Allerdings müssen Sie diese Hypothese mit Ihren tatsächlichen Daten testen, und Sie sollten sich vor einer vorzeitigen [Mikro-] Optimierung .
Tags und Links javascript performance lookup