Какие библиотеки мемоизации доступны для Javascript?

Существует множество библиотек Javascript для функций запоминания.

Какие из них являются лучшими (высококачественные, гибкие, быстрые и т. Д.) Для различных сценариев использования?

1 ответ

Я обнаружил, что есть тонны различных библиотеки JavaScript запоминания там, и все они работают по - разному.

Попробую здесь перечислить и сравнить "лучшие". (упорядочены примерно по тому, насколько эффективными / универсальными я их оцениваю; или, скорее, это план, когда у меня будет время изучить их дальше!)

Основные функции: (отмечены значком "да", "нет", "частично", "неизвестно")

npm) Установить из NPM: пакет доступен на npm. (для легкой интеграции / обновления)
m-arg) Несколько аргументов: может запоминать функции, которым передается несколько аргументов.
o-arg) Аргументы объекта: может запоминать функции, которым передаются аргументы объекта.
o-hash) Хеширование объекта: можно запоминать, используя внутреннее хеширование JS дляobject аргументы, используя Map/WeakMap. (лучше перфоманс, чем сериализация или итерация записи в кеш)
m-slot) Несколько слотов: может хранить кешированные результаты не только для последнего набора аргументов. (без необходимости ручного создания новых "кэш-слотов" / "экземпляров")
auto) Автоматическое запоминание: может запоминать на основе обычных переданных аргументов; не требует специфической для функции настройки / упаковки для базовой мемоизации. (все еще может потребоваться универсальная упаковка)

Для синхронных функций

moize (на основе micro-memoize)

Основные функции) npm: ✠”ï¸, m-arg: ✔ ï¸, o-arg: ✠”ï¸, o-hash: â Œ, m-slot: ✔ ï¸, auto: ✠”ï¸
Популярность) Звезды на GitHub: ~550; Еженедельные загрузки NPM: ~76 КБ (2020-04-24)

памятный человек

Основные функции) npm: ✠”ï¸, m-arg: ✔ ï¸, o-arg: ✠”ï¸, o-hash: âš ™ ï¸, m-slot: ✔ ï¸, auto: ✠” •
Популярность) Звезды на GitHub: ~1.1k; Еженедельные загрузки NPM: ~ 1,9 млн (2020-04-24)

mobx-utils:computedFn

Основные функции) npm: ✠”ï¸, m-arg: ✔ ï¸, o-arg: ✠”ï¸, o-hash: ✔ ï¸, m-slot: ✠”ï¸, auto: ✔ •
Популярность) Звезд на GitHub: ~850; Еженедельные загрузки NPM: ~60 КБ (2020-04-24)

быстро запоминать

Основные функции) npm: ✠”ï¸, m-arg: ✔ ï¸, o-arg: ✠”ï¸, o-hash: â Œ, m-slot: ✔ ï¸, auto: ✠”ï¸
Популярность) Звезды на GitHub: ~2.2k; Еженедельные загрузки NPM: ~381 тыс. (2020-04-24)

карта-памятка

Основные функции) npm: ✠”ï¸, m-arg: ✔ ï¸, o-arg: ✠”ï¸, o-hash: ✔ ï¸, m-slot: ✠”ï¸, auto: ✔ я

lodash.memoize (код)

Основные функции) npm: ✠”ï¸, m-arg: â, o-arg: ✔ ï¸, o-hash: ✠”ï¸, m-slot: ✔ ï¸, auto: ✠”ï¸

запоминать-слабый

Основные функции) npm: ✠”ï¸, m-arg: ✔ ï¸, o-arg: ✠”ï¸, o-hash: ✔ ï¸, m-slot: ✠”ï¸, auto: ✔ я

запоминать-неизменный

Основные функции) npm: ✠”ï¸, m-arg: ✔ ï¸, o-arg: ✠”ï¸, o-hash: ✔ ï¸, m-slot: ✠”ï¸, auto: ✔ я

underscore.memoize (код)

Основные функции) npm: ✠”ï¸, m-arg: â, o-arg: ✔ ï¸, o-hash: â Œ, m-slot: ✠”ï¸, auto: ✔ ï¸

мемоизирующее состояние

Основные функции) npm: â ”, m-arg: â”, o-arg: â ”, o-hash: â”, m-slot: â ”, auto: â”

каше

Основные функции) npm: â ”, m-arg: â”, o-arg: â ”, o-hash: â”, m-slot: â ”, auto: â”

нанопамять

Основные функции) npm: â ”, m-arg: â”, o-arg: â ”, o-hash: â”, m-slot: â ”, auto: â”

памятный

Основные функции) npm: â ”, m-arg: â”, o-arg: â ”, o-hash: â”, m-slot: â ”, auto: â”

мемоиз-фн

Основные функции) npm: â ”, m-arg: â”, o-arg: â ”, o-hash: â”, m-slot: â ”, auto: â”

мемоиз-кеш

Основные функции) npm: â ”, m-arg: â”, o-arg: â ”, o-hash: â”, m-slot: â ”, auto: â”

запоминать-один

Основные функции) npm: ✠”ï¸, m-arg: â”, o-arg: â ”, o-hash: â”, m-slot: â Œ, auto: â ”

использовать-памятку-один

Основные функции) npm: â ”, m-arg: â”, o-arg: â ”, o-hash: â”, m-slot: â, auto: â ”

@ эмоция / слабая память

Основные функции) npm: â ”, m-arg: â”, o-arg: â ”, o-hash: â”, m-slot: â ”, auto: â”

Lru-Memoizer

Основные функции) npm: â ”, m-arg: â”, o-arg: â ”, o-hash: â”, m-slot: â ”, auto: â”

мем

Основные функции) npm: â ”, m-arg: â”, o-arg: â ”, o-hash: â”, m-slot: â ”, auto: â”

memoizejs

Основные функции) npm: â ”, m-arg: â”, o-arg: â ”, o-hash: â”, m-slot: â ”, auto: â”

запоминать

Основные функции) npm: â ”, m-arg: â”, o-arg: â ”, o-hash: â”, m-slot: â ”, auto: â”

повторно выбрать

Основные функции) npm: â ”, m-arg: â”, o-arg: â ”, o-hash: â”, m-slot: â ”, auto: â Œ

Rememo

Основные функции) npm: â ”, m-arg: â”, o-arg: â ”, o-hash: â”, m-slot: â ”, auto: â Œ

запоминать-привязать

Основные функции) npm: â ”, m-arg: â”, o-arg: â ”, o-hash: â”, m-slot: â ”, auto: â”

мемоизесинхронизация

Основные функции) npm: â ”, m-arg: â”, o-arg: â ”, o-hash: â”, m-slot: â ”, auto: â”

@thi.ng/memoize

Основные функции) npm: â ”, m-arg: â”, o-arg: â ”, o-hash: â”, m-slot: â ”, auto: â”

запоминать

Основные функции) npm: â ”, m-arg: â”, o-arg: â ”, o-hash: â”, m-slot: â ”, auto: â”

памятка

Основные функции) npm: â ”, m-arg: â”, o-arg: â ”, o-hash: â”, m-slot: â ”, auto: â”

memoize-id

Основные функции) npm: â ”, m-arg: â”, o-arg: â ”, o-hash: â”, m-slot: â ”, auto: â”

https://github.com/bigcommerce/memoize-js

Основные функции) npm: â ”, m-arg: â”, o-arg: â ”, o-hash: â”, m-slot: â ”, auto: â”

Для асинхронных функций

mobx-utils:computedFn

[см. запись выше в синхронной категории]

p-memoize

Основные функции) npm: â ”, m-arg: â”, o-arg: â ”, o-hash: â”, m-slot: â ”, auto: â”

узел-memoizeasync

Основные функции) npm: â ”, m-arg: â”, o-arg: â ”, o-hash: â”, m-slot: â ”, auto: â”

обещать-запоминать

Основные функции) npm: â ”, m-arg: â”, o-arg: â ”, o-hash: â”, m-slot: â ”, auto: â”

использовать-async-memo

Основные функции) npm: â ”, m-arg: â”, o-arg: â ”, o-hash: â”, m-slot: â ”, auto: â”

async-memo-ize

Основные функции) npm: â ”, m-arg: â”, o-arg: â ”, o-hash: â”, m-slot: â ”, auto: â”

memoize-async

Основные функции) npm: â ”, m-arg: â”, o-arg: â ”, o-hash: â”, m-slot: â ”, auto: â”

Обсуждение

На самом деле существует гораздо больше библиотек мемоизации JS, чем эта (я знаю...), но я не упомянул те, в которых библиотека:

  • Невозможно запоминать в памяти. (например, только файловый кеш)
  • Невозможно запоминать отдельные функции. (например, только методы класса)
  • Это не с открытым исходным кодом и не размещается в каком-то сумасшедшем месте, как этот XD.
  • Было за пределами первых нескольких страниц результатов. (на это можно потратить столько времени...)
Другие вопросы по тегам