🤯 Ускоряем работу кода при помощи предвычисления↪
Ещё один способ оптимизировать свой код практически на любом языке от Виктора Хомякова — старшего разработчика в поиске Яндекса. Напомним, Витя отвечает за то, чтобы поисковые интерфейсы загружались максимально быстро.
— Иногда бывает так, что некоторые константы можно посчитать заранее. В примере на картинке мы обрабатываем все точки изображения. Очень часто при работе с изображениями нужны сложные и затратные математические вычисления. Здесь мы вычисляем кубический корень из компонент RGB каждой точки. Скорость вычислений не очень большая: на моей машине получается примерно 7 млн операций в секунду. Другими словами, за секунду мы успеем обработать примерно два мегапикселя картинки. Это не очень много для современных машин.
Мы можем заметить, что константа ⅓ вычисляется каждый раз, и запомнить её. При этом скорость работы увеличится.
Но этого всё ещё недостаточно.
Обратите внимание, что чаще всего компоненты R, G и B представляют собой байты. То есть каждый из них принимает всего лишь 256 значений. Соответственно, наш кубический корень, как и результат любой формулы над байтом, тоже может принимать только 256 возможных значений.
Мы можем записать заранее все значения формулы, какой бы сложной она ни была, а в рантайме всего лишь выбирать нужные значения из массива. Мы получаем для формулы примерно десятикратное ускорение по сравнению с первоначальным кодом — точные результаты могут немного отличаться. Чем сложнее формула, тем большее ускорение мы можем получить.