Комментарии 15
Позанудствую: график не слишком понятен, даже оси не подписаны. Какие такие obj(1), map(1) и иже с ними...
... оформлен не по ГОСТ 2.319-81... ))
Ну окей, а причина? копали глубже? А то может это просто особенность реализации Map в nodejs указанной версии. С другой версией пробовали?
читаться много чаще, чем писаться
мы не будем туда ничего добавлять
Какой-то странный кейс. В какой задаче вам понадобится именно итерировать кэш? Чаще всего из кэша читают, редко когда его нужно целиком прогонять.
Он здесь не прогоняется целиком и не итерируется, мы просто эмулируем миллион случайных обращений.
А кейс очень простой - при старте приложения вы можете поднимать некий заранее предрассчитанный кэш, который покрывает 99.9% обращений, а потом только обращаться к нему, не пытаясь его изменить. Вполне очевидно, что попытка добавления этих 0.1% разнообразных значений может со временем непотребно раздуть его.
Создание кеша на миллион записей:
![Создание словаря в 2 раза быстрее Создание словаря в 2 раза быстрее](https://habrastorage.org/getpro/habr/upload_files/592/b3e/abd/592b3eabdbf4b5d2ea7d82287c711692.png)
Миллион успешных обращений к кешу:
![Разницы никакой Разницы никакой](https://habrastorage.org/getpro/habr/upload_files/2fa/d77/45a/2fad7745a10ab36ec6ab2c3130495219.png)
кэш у нас будет "стабильным" — то есть мы не будем туда ничего ни добавлять, ни удалять;
Именно здесь и порылась собака: Map рассчитана выдерживать добавления/удаления ключей. А Object отлично подходит для статических данных, но будет деградировать на обновляемых (особенно с удалениями).
Кэш в JavaScript: не все Map'ы одинаково полезны