Привет, в этой статье мы поговорим о мемоизации. А затем мы узнаем, как реализовать технику мемоизации в нашем коде Javascript.

Для начала давайте посмотрим, что такое мемоизация.

Мемоизация - это метод, позволяющий повысить скорость работы приложения за счет кэширования результатов для вызовов дорогостоящих функций. Например, у нас есть функция факториала, которая вычисляет факториал заданного значения. Как мы знаем, факториал числа всегда один и тот же и никогда не меняется. 5! всегда равно 120. Если мы рассчитываем 5! один раз , нам не нужно рассчитывать его снова. Мы можем кэшировать результат в области видимости функции. Затем, всякий раз, когда 5 отправляется в качестве параметра, мы можем напрямую вернуть результат из кеша. Таким образом, производительность нашего кода будет увеличена. Подробный пример кода ниже.

Пример факторного расчета

Я запускаю пример кода, запоминая, либо не запоминая в jsbench.ch

Результат можно увидеть на скриншоте. Мемоизированный код примерно на 50% быстрее, чем незафиксированный, в зависимости от того, сколько раз вы выполняли функцию. Соотношение может отличаться в зависимости от времени выполнения функции и компьютерного оборудования, такого как ЦП и т. Д.

Когда код был выполнен 6 раз, коэффициент уменьшился, что означает, что производительность увеличилась примерно на 75%. Щелкните, чтобы увидеть тест производительности.

ЗАКЛЮЧЕНИЕ

Когда мы применили эту технику к методам, время ее выполнения резко сократилось. Мемоизация лучше всего работает с методами, которые могут иметь большую нагрузку. Вы должны быть осторожны при использовании мемоизации, поскольку вывод кэшируется после первого выполнения, значения, которые динамически изменяются внутри метода, приведут к тому же результату с теми же параметрами.
Мы реализовали эту технику для некоторых функций в проект, над которым я работал с Tugay İlik. Мы увидели, что общая производительность системы увеличилась почти в 6 раз. Надеюсь, статья вам понравилась.

Комментарии, публикации и обсуждения по теме всегда приветствуются. Буду рад помочь с любыми интересующими вас вопросами!