2016-07-05 19 views
3

Ich weiß, dass moderne Javascript-Engines versteckte Klassen hinter den Kulissen erstellen, so ist es not recommended Objekte zur Laufzeit zu ändern (wenn Sie eine große Anzahl von Objekten mit der gleichen Struktur haben).Führen Javascript-Engines eine Optimierung von multidimensionalen Arrays durch?

Hat jemand von internen Optimierungen von zweidimensionalen Arrays gehört?

ich eine zwei-dimensionales Array auf diese Weise:

var map = []; 
for (i = 0; i < 100000; i++) { 
    map.push(Array(2)); 
} 

Ich plane die schöne Struktur wie folgt zu brechen:

map[100].push(/* third element! */) 

Wird dies einen dramatischen Einfluss auf die Leistung haben?

+2

Sie sollten es ausprobieren und Benchmark – Bergi

+0

Betrachten Sie [diesen Artikel] (https://gamealchemist.wordpress.com/2013/05/01/lets-get-those-javascript-arrays-to-work-fast/), scheint es, dass es eine memcopy von diesem einzelnen Array erfordert, da es nicht mehr in der Lage sein wird, dieses Array im fortlaufenden Speicher mit dem Rest zu speichern. Es sollte keine der anderen Arrays stören, bis der Speicher defragmentiert ist. Ich bezweifle, dass Sie irgendwelche Auswirkungen auf die Leistung sehen werden. – 4castle

Antwort

0

V8 führt keine Optimierungen für mehrdimensionale Arrays durch, daher sollte dort keine messbare Auswirkung auf die Leistung sein.

Ich kann nicht für andere JavaScript-Engines sprechen, würde es aber überraschend finden, wenn das von Ihnen beschriebene Muster überall negative Auswirkungen hätte. Die Art der Optimierung, über die Sie sprechen, erfordert typischerweise, Annahmen zu treffen und sie mit Prüfungen zu schützen. Angesichts der hohen Dynamik von JavaScript-Arrays ist dies spröde genug für eindimensionale Arrays; das Überprüfen einer nicht-trivialen Eigenschaft von zweidimensionalen Arrays ist wahrscheinlich nicht die Kosten wert.