Get Mystery Box with random crypto!

Кешування vs мемоізація Одного вечора адміністраторка каналу | Radio Kottans

Кешування vs мемоізація

Одного вечора адміністраторка каналу не знала, чим кешування відрізняється від мемоізації. Якщо у вас теж серед ночі постане таке питання, то ось вам відповідь, йдіть спокійно спати.

Кешування – збереження даних при запиті для того, щоб при наступному запиті на ті самі дані віддати їх швидше. Кешування – досить широке поняття, зокрема воно охоплює мемоізацію. 

Мемоізація описує специфічний вид кешування, коли кешується значення функції, тобто результат її роботи (return) для певних аргументів. При повторному виклику з тими самими аргументами функція повертає збережений результат та економить повторні обчислення.

Кешування часто описує збереження результатів запитів на ззовні (читання файлів, запити мережею, до БД тощо), мемоізація натомість описує тільки збереження результатів власних обчислень.

Мемоізація має сенс лише у випадку детермінованості функції, тобто коли з тими самими аргументами функція обов’язково поверне той самий результат (хороший приклад – функція, що додає два числа. Поганий приклад – функція, що повертає випадкове значення чи поточний час або робить запит до API). Одним словом, мемоізувати варто лише чисті функції. Натомість кешування може нехтувати актуальністю даних заради швидкодії . Наприклад, коли ми бачимо закешовану версію сайту у метро з телефону, ми приймаємо можливість того, що сайт на сервері міг змінитися і раді хоч так мати що почитати.

До речі, слово “мемоізація” споріднене з memory, проте літери “р” у ньому не має. Ми теж обурені, але вже майже змирилися.