«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Предотвращает повторное выполнение больших функций JavaScript, которые были обработаны один раз с тем же параметром.

Предотвращает повторное выполнение больших функций JavaScript, которые были обработаны один раз с тем же параметром.

Опубликовано 29 августа 2024 г.
Просматривать:171

Prevents re-execution of large javascript functions that have been processed once with the same parameter.

мемофия

Механизм кэширования (мемоайзер) для функций, выполняемых с одинаковыми параметрами (всего 1,14 КБ)

Этот проект предоставляет функцию memoize для повышения производительности в проектах JavaScript или TypeScript за счет кэширования результатов дорогостоящих вызовов функций. Благодаря запоминанию повторные вызовы с одними и теми же аргументами вернут кэшированный результат, что ускоряет выполнение.

Этот модуль работает как хук useMemo в реакции, но НЕ требует реакции. Вы можете использовать любой фреймворк или проекты на чистом JavaScript

Пакет Npm
Гитхаб

Функции

  • Мемоизация функций: кэширует результаты вызовов функций с теми же аргументами.
  • Отслеживание зависимостей: обновляет кеш при изменении зависимостей.
  • Гибкость: можно использовать как в проектах JavaScript, так и в TypeScript.
  • Лучшее решение для ресурсоемких операций или сложных вычислений
  • Отключенные функции удаляются из памяти. Кэши, принадлежащие этой функции, также удаляются.
  • Хранилище кэша на основе WeakMap
  • WeakMap Отключает методы, которые не могут взаимодействовать со слабыми ссылками, и запускает сборщик мусора

Вариант использования

Без параметров deps

В следующем процессе, когда метод 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

Если вы хотите, чтобы метод запускался снова с тем же параметром в соответствии с некоторыми зависимостями, вы можете передать параметр 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
Заявление о выпуске Эта статья переиздана по адресу: https://dev.to/ahmetilhn/prevents-re-excution-of-large-javascript-functions-hat-have-been-procained-with-with-same-parameter-1ici?1, если есть какие-либо нарушения, пожалуйста, свяжитесь с исследованием[email protected], чтобы Delite It.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3