0

少なくともこの例では、ECMAScript 6 Mapは、オブジェクトを使用するよりも取得が遅いようです。Firefox では、次のコードを使用します。

map = {};
var i=1000000;
console.time('populate');
while (i--) {
    map[i] = 'value of '+i;
}
console.timeEnd('populate');

console.time('has');
var i=2000000;
var ctr = 0;
while (i--) {
    if (map.hasOwnProperty(i)) {
        ctr++;
    }
}
console.timeEnd('has');
console.log(ctr)





map = new Map();
var i=1000000;
console.time('populate');
while (i--) {
    map.set(i, 'value of '+i);
}
console.timeEnd('populate');

console.time('has');
var i=2000000;
var ctr = 0;
while (i--) {
    if (map.has(i)) {
        ctr++;
    }
}
console.timeEnd('has');
console.log(ctr)



map = {};
var i=1000000;
console.time('populate');
while (i--) {
    map[i] = 'value of '+i;
}
console.timeEnd('populate');

console.time('has');
var i=2000000;
var ctr = 0;
while (i--) {
    if (map.hasOwnProperty(i)) {
        ctr++;
    }
}
console.timeEnd('has');
console.log(ctr)

出力は次のとおりです。

populate: timer started Maptest:16
populate: 465.51ms Maptest:20
has: timer started Maptest:22
has: 133.03ms Maptest:30
1000000 Maptest:31
populate: timer started Maptest:39
populate: 418.26ms Maptest:43
has: timer started Maptest:45
has: 414.44ms Maptest:53
1000000 Maptest:54
populate: timer started Maptest:60
populate: 347.55ms Maptest:64
has: timer started Maptest:66
has: 124.67ms Maptest:74
1000000

チェックがオブジェクト チェックの 4 倍遅いのはなぜですか?

4

1 に答える 1

1

私にはキャッシュ効果のように見えます。キャッシュに収まるようにマップ内のアイテムの数を減らすと、ルックアップがはるかに高速になります....

于 2014-03-03T16:33:59.130 に答える