Этот проект предоставляет функцию memoize для повышения производительности в проектах JavaScript или TypeScript за счет кэширования результатов дорогостоящих вызовов функций. Благодаря запоминанию повторные вызовы с одними и теми же аргументами вернут кэшированный результат, что ускоряет выполнение.
Этот модуль работает как хук useMemo в реакции, но НЕ требует реакции. Вы можете использовать любой фреймворк или проекты на чистом JavaScript
Пакет Npm
Гитхаб
В следующем процессе, когда метод concatPhoneNumber вызывается снова с теми же параметрами, функция не выполняется снова, а извлекает результат из кеша.
import memofy from "memofy"; const concatPhoneNumber = (extension, number) => { // Heavy calculation // return result }; const memoizedConcatPhoneNumber = memofy(concatPhoneNumber, []); memoizedConcatPhoneNumber(90, 555); // Runs concatPhoneNumber when first run memoizedConcatPhoneNumber(90, 555); // get value from cache memoizedConcatPhoneNumber(90, 552); // Runs concatPhoneNumber because params is change
Если вы хотите, чтобы метод запускался снова с тем же параметром в соответствии с некоторыми зависимостями, вы можете передать параметр deps следующим образом.
import memofy from "memofy"; const taxRatio = 0.5; const product = { title: "Test product", price: 10 }; const calculateTax = () => { // Calculate tax by product price // Heavy calculation return taxRatio * product.price; }; const memoizedConcatPhoneNumber = memofy(calculateTax, [product, taxRatio]); calculatedPrice = calculateTax(); // Runs concatPhoneNumber when first run product.price = 40; let calculatedPrice = calculateTax(); // Runs concatPhoneNumber because product dep changed taxRatio = 0.8; calculatedPrice = calculateTax(); // Runs concatPhoneNumber because taxRatio changed
Результаты производительности сложной функции, которая различает простые числа. Тест производительности
Случай | РС |
---|---|
Время первого выполнения (без кэширования) | > 52,08 мс |
Второе время выполнения (кэширование) | |
и последующее выполнение (кэширование) |
Тесты написаны для всех случаев и всех типов параметров. Тесты
Файл | % заявок | % Ветвь | % функций | % строк | Непокрытые номера строк |
---|---|---|---|---|---|
Все файлы | 100 | 100 | 100 | 100 | 0 |
библиотека | 100 | 100 | 100 | 100 | 0 |
index.ts | 100 | 100 | 100 | 100 | 0 |
библиотека/магазин | 100 | 100 | 100 | 100 | 0 |
CacheStore.ts | 100 | 100 | 100 | 100 | 0 |
DepsStore.ts | 100 | 100 | 100 | 100 | 0 |
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3