Какие библиотеки мемоизации доступны для 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.
- Было за пределами первых нескольких страниц результатов. (на это можно потратить столько времени...)