Как стать автором
Обновить

Комментарии 15

Позанудствую: график не слишком понятен, даже оси не подписаны. Какие такие obj(1), map(1) и иже с ними...

... оформлен не по ГОСТ 2.319-81... ))

Прошу подать меня правильно: такая подача материала мешает быстрому усвоению информации. К примеру, для того, чтобы понять, что такое obj(1), map(1) и др., мне пришлось вчитаться в предложение, идущее перед графиком: "Но для большей уверенности прогоним тест трижды <...> ".

Скорректировал подпись - так более очевидно?

Уже лучше, но нет предела совершенству. :)

Ну окей, а причина? копали глубже? А то может это просто особенность реализации Map в nodejs указанной версии. С другой версией пробовали?

В статье, указанной в последнем абзаце, как раз рассказывается, как конкретно работает Map "внутри" V8. Если коротко - причина в особенностях используемого в V8 алгоритма хэширования.

читаться много чаще, чем писаться

мы не будем туда ничего добавлять

Какой-то странный кейс. В какой задаче вам понадобится именно итерировать кэш? Чаще всего из кэша читают, редко когда его нужно целиком прогонять.

Он здесь не прогоняется целиком и не итерируется, мы просто эмулируем миллион случайных обращений.

А кейс очень простой - при старте приложения вы можете поднимать некий заранее предрассчитанный кэш, который покрывает 99.9% обращений, а потом только обращаться к нему, не пытаясь его изменить. Вполне очевидно, что попытка добавления этих 0.1% разнообразных значений может со временем непотребно раздуть его.

хм...res &&= cachedVal превратится в 0 при первом же попадании cachedVal === 0, а дальше правая часть просто перестанет выполняться при следующих итерациях

На миллионном кэше у меня Map : Object получилось 550ms : 400ms = 1.375, тут 454ms : 377ms = 1.20, примерно так же.

кэш у нас будет "стабильным" — то есть мы не будем туда ничего ни добавлять, ни удалять;

Именно здесь и порылась собака: Map рассчитана выдерживать добавления/удаления ключей. А Object отлично подходит для статических данных, но будет деградировать на обновляемых (особенно с удалениями).

Object отлично подходит для статических данных

Однако, в нашем тесте до 64K ключей Map показал себя лучше и при отсутствии вставок/удалений.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий