2016-07-05 4 views
3

現代のjavascriptエンジンでは、暗黙のクラスの背後にが作成されているので、実行時にオブジェクトを変更するにはnot recommendedです(同じ構造のオブジェクトが多数ある場合)。javascriptエンジンは多次元配列の最適化を実行しますか?

二次元アレイの内部最適化について聞いたことがありますか?

私はこのよう2次元配列を作成します。

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

私はこのような素敵な構造を打破するために計画しています:

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

これはパフォーマンスに劇的な影響を与えるのだろうか?

+2

ベンチマーク – Bergi

+0

[この記事を見る](https://gamealchemist.wordpress.com/2013/05/01/lets-get-those-javascript-arrays-to-work-fast/) )、それはもはや連続したメモリに残りの配列を格納することができなくなるので、その単一配列のmemcopyを必要とするようです。メモリが最適化されるまで、他の配列を混乱させてはいけません。私はパフォーマンスの影響を見ることはできません。 – 4castle

答えて

0

V8では、多次元配列の最適化が行われないため、パフォーマンスに大きな影響はありません。

私は他のJavaScriptエンジンについて話すことはできませんが、あなたが記述したパターンがどこにでも悪影響を及ぼしていれば、それは驚くべきことです。あなたが話している最適化の種類は、通常、仮定を行い、小切手でそれらを守る必要があります。 JavaScript配列の非常に動的な性質を考えると、これは1次元配列にとっては脆弱です。 2次元配列の重要でない特性をチェックすることはおそらくコストに見合ったものではないでしょう。

関連する問題