Map()
и его производительностиMap int key get took:
64 против 5610 это:
задался я вопросом, какова производительность Map
и методом гугления сразу наткнулся на вот такой gist с кодом теста и результатами, в которых мап был раза в два-три шустрее объектов и массивов. думаю: дай-ка и я попробую запустить тест. и вот что получилось у меня:
браузер chrome(68.0)
START
Map int key set took: 1198
Obj int key set took: 5177
ray int key set took: 6113
Map int key get took: 64
Obj int key get took: 5610
ray int key get took: 5044
Map string key set took: 3614
Obj string key set took: 6296
ray string key set took: 8691
Map string key get took: 8126
Obj string key get took: 7608
ray string key get took: 6828
END
$ node -v
v10.1.0
Map int key set took: 1208
Obj int key set took: 3516
ray int key set took: 3567
Map int key get took: 37
Obj int key get took: 2252
ray int key get took: 2018
Map string key set took: 2444
Obj string key set took: 3925
ray string key set took: 3398
Map string key get took: 712
Obj string key get took: 1706
ray string key get took: 2311
(мобильная версия СО не отображает snippet'ы)
function TEST(/*this: DedicatedWorkerGlobalScope*/)
{
console.log = (...mess) => this.postMessage(mess)
console.log('START\n')
var indexes = [];
{
let n = 2000000;
while (n > 0)
{
indexes.push(Math.random() * 2000000);
n--;
}
}
let looper = (callback) =>
{
let n = 2000000;
while (n > 0)
{
callback(indexes[n], n);
n--;
}
}
let timer = (mess, callback) =>
{
let start = Date.now();
callback()
console.log(mess, Date.now() - start);
}
{//#region test int
let map = new Map();
let obj = {};
let ray = [];
timer('Map int key set took: ', () => looper((key, index) => map.set(key, index)));
timer('Obj int key set took: ', () => looper((key, index) => obj[key] = index));
timer('ray int key set took: ', () => looper((key, index) => ray[key] = index));
console.log(' ');
timer('Map int key get took: ', () => looper((key, index) => { let dummylet = map.get(key); dummylet; }));
timer('Obj int key get took: ', () => looper((key, index) => { let dummylet = obj[key]; dummylet; }));
timer('ray int key get took: ', () => looper((key, index) => { let dummylet = ray[key]; dummylet; }));
}//#endregion
console.log('\n\n');
{//#region test string
let map = new Map();
let obj = {};
let ray = [];
timer('Map string key set took: ', () => looper((key, index) => map.set('' + key, '' + index)));
timer('Obj string key set took: ', () => looper((key, index) => obj['' + key] = '' + index));
timer('ray string key set took: ', () => looper((key, index) => ray['' + key] = '' + index));
console.log(' ');
timer('Map string key get took: ', () => looper((key, index) => { let dummylet = map.get('' + key); dummylet; }));
timer('Obj string key get took: ', () => looper((key, index) => { let dummylet = obj['' + key]; dummylet; }));
timer('ray string key get took: ', () => looper((key, index) => { let dummylet = ray['' + key]; dummylet; }));
}//#endregion
console.log('\nEND')
}
const genCode = (f/*: Function*/) => `;(${f})();this.close()`
let code = genCode(TEST)
let blob = new Blob([code], { type: 'text/javascript' })
let url = URL.createObjectURL(blob)
let myWorker = new Worker(url)
myWorker.onmessage = ({ data }) => console.log.apply(console, data)
myWorker.onerror = console.error
если есть желание дополнить раздел - воспользуйтесь кнопкой править.
MDN Map
Объект Map
является простым ассоциативным массивом.
Любые типы (как объекты, так и примитивы) могут быть использованы в качестве ключа или значения.
learn.javascript.ru/set-map
Set, Map, WeakSet и WeakMap
В ES-2015 появились новые типы коллекций в JavaScript:
Set
, Map
, WeakSet
и WeakMap
.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть вот такой код, писал его самПроблема в том что у меня параллакс эффект который выводит страницу справа налево