Kann ich die Suchgeschwindigkeit erhöhen, indem ich Eigenschaften im Objekt positioniere?

8

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?

  1. Legen Sie die am häufigsten benötigten Eigenschaften am Anfang der Objektliteralsyntax fest?
  2. Wenn # 1 keine Auswirkungen hat, sollte ich zwei separate Objekte erstellen, eines mit den häufigsten 5% der Eigenschaften, das zuerst suchen und dann, wenn die Eigenschaft dort nicht gefunden wird, das Objekt mit allen durchsehen weniger häufige Eigenschaften?

Oder gibt es einen besseren Weg?

    
Mason DeCamillis 03.02.2014, 21:39
quelle

4 Antworten

3

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

getestet     
David 03.02.2014 22:00
quelle
1

Ja, 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.

    
Organiccat 03.02.2014 21:45
quelle
1

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.

    
GameAlchemist 04.02.2014 01:18
quelle
1
  

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 .     

Bergi 03.02.2014 23:09
quelle

Tags und Links