Що таке кешування? Простий посібник для тих, хто створює застосунки
Кешування означає збереження готової копії того, що було повільним або дорогим у отриманні, щоб наступний запит за цим можна було швидко обслужити з цієї копії. Збережена копія називається кешем. Ваш браузер кешує зображення, щоб сайт завантажувався швидше під час другого відвідування; сервер кешує результат повільного запиту до бази даних, щоб не виконувати його для кожного відвідувача.
Кешування робить застосунки швидшими і дешевшими в експлуатації. Його головний компроміс у тому, що копія може застаріти.
Чому кешування важливе, коли ви створюєте з ШІ
З кешуванням в застосунках, створених з ШІ, ви зіткнетеся в трьох випадках:
- «Я оновив застосунок, але все ще бачу стару версію». Це найпоширеніший випадок кешування, і зазвичай він нешкідливий: ваш браузер або CDN показує збережену копію.
- Швидкість. Якщо сторінка повільна, бо щоразу перераховує ті самі числа для кожного відвідувача, кешування результату може зробити її миттєвою.
- Вартість. Багато ШІ-конструкторів і хостингів беруть плату за обчислення, час роботи бази даних і зовнішні виклики API. Якщо тисяча відвідувачів викликає один і той самий дорогий запит, кешування дозволяє заплатити за нього один раз.
Знання основ допоможе просити кешування там, де воно корисне, і помічати його, коли воно є причиною дивної поведінки.
Повсякденна аналогія
Уявіть кухню зайнятої кав'ярні.
Щоранку бариста міг би заварювати кожну каву зі свіжомелених зерен у момент замовлення. Це повільно. Натомість він тримає на плитці готовий глечик фільтрованої кави. Більшість клієнтів отримують чашку за лічені секунди — це попадання в кеш. Коли глечик закінчується, хтось заварює новий — це промах кешу.
Але кава, що довго стоїть, псується, тож у кав'ярні є правило: викидати будь-який глечик старший за 30 хвилин. Це і є час придатності кешу. Ніхто не тримав би один і той самий глечик цілий день, і ніхто не заварював би наперед індивідуальне замовлення з вівсяним молоком і трьома цукрами — дещо взагалі не слід кешувати.
Де живуть кеші
Одне завантаження сторінки може пройти через кілька кешів — від найближчого до користувача до найдальшого:
| Кеш | Де розташований | Що зазвичай зберігає | Приклад |
|---|---|---|---|
| Кеш браузера | На пристрої відвідувача | Зображення, таблиці стилів, скрипти, шрифти | Ваш логотип завантажується миттєво на другій сторінці |
| Кеш CDN | Сервери по всьому світу, поблизу відвідувачів | Статичні файли і інколи цілі сторінки | Відвідувач у Токіо отримує файли з сусіднього сервера, а не з вашого джерела |
| Кеш застосунку | На сервері або поруч з ним, часто в пам'яті або Redis | Результати повільних запитів або зовнішніх викликів API | Сьогоднішні курси валют, отримані раз на годину |
| Кеш бази даних | Усередині бази даних | Нещодавно використані дані та плани запитів | Популярні рядки залишаються у швидкій пам'яті |
CDN (мережа доставки контенту) — це, по суті, світова мережа кешів для файлів вашого сайту.
Як кеш вирішує, що зберігати
Кожен кеш має відповідати на ті самі запитання:
- Що можна кешувати? Публічні спільні дані (зображення товару, допис у блозі) — так. Приватні дані (сторінка облікового запису користувача, його повідомлення) — ніколи у спільному кеші.
- Як довго? Це TTL (time to live, час життя). Логотип можна кешувати на рік; рівень залишків на складі — 30 секунд.
- Як він оновлюється? Або строк копії спливає, і її отримують знову, або застосунок свідомо видаляє її, коли дані змінюються — це називається інвалідацією.
Для вебсайтів сервер повідомляє браузерам і CDN, як кешувати кожен файл, за допомогою заголовка Cache-Control. Наприклад, Cache-Control: max-age=3600 означає «цю копію можна використовувати повторно протягом години».
Сучасні інструменти збірки беруть на себе найскладнішу частину для статичних файлів через cache busting: щоразу, коли файл змінюється, він отримує нове ім'я з відбитком, наприклад app.3f9a2c.js. Браузери можуть довго кешувати старе ім'я, бо нова версія просто має інше ім'я.
Практичний приклад: каталог товарів
У вас невеликий інтернет-магазин. Головна сторінка показує 50 товарів із цінами та залишками на складі з бази даних, а також список «популярних», для якого потрібно повільно порахувати всі замовлення.
- Зображення і скрипти кешуються браузером і CDN на довгий строк. Кожна нова збірка дає змінюваним файлам нові імена, тож оновлення все одно з'являються.
- Список популярних обчислюється раз на 10 хвилин і зберігається в кеші застосунку. Кожен відвідувач протягом цих 10 хвилин отримує збережений результат миттєво.
- Ціни кешуються на короткий строк, а кеш очищується щоразу, коли ви редагуєте товар, тож клієнти не бачать застарілої ціни довго.
- Залишки при оформленні ніколи не кешуються. Коли хтось натискає «Купити», застосунок перевіряє реальну базу даних, тож не може продати товар, що щойно закінчився.
- Сторінки кошика і облікового запису ніколи не зберігаються у спільних кешах, бо вони персональні.
Результат: головна сторінка швидка, база даних виконує значно менше роботи, і нічого, що важливе для грошей чи приватності, ніколи не застаріває.
Ключові терміни
| Термін | Значення |
|---|---|
| Попадання / промах кешу | Дані знайдено в кеші / їх довелося отримувати з джерела. |
| TTL (time to live) | Скільки часу збережена копія вважається актуальною. |
| Застарілі дані | Копія в кеші, яка вже неактуальна. |
| Інвалідація | Свідоме видалення копії з кешу, бо оригінал змінився. |
| Cache busting | Зміна імені файлу або URL, коли він змінюється, щоб кеші завантажили нову версію. |
| Cache-Control | Заголовок HTTP, який повідомляє браузерам і CDN, як кешувати відповідь. |
| Жорстке оновлення | Перезавантаження сторінки з вказівкою браузеру ігнорувати свій кеш. |
| Redis | Популярне сховище даних у пам'яті, часто використовуване як кеш застосунку. |
Поширені хибні уявлення
- «Кешування завжди добре». Кешування не того вимагає реальних помилок: застарілі ціни, відсутні нові дописи або — найгірший випадок — приватна сторінка одного користувача, показана іншому. Кешуйте свідомо.
- «Якщо я бачу стару версію, моє оновлення не вдалося». Зазвичай ні. Спробуйте жорстке оновлення (Ctrl+Shift+R або Cmd+Shift+R на Mac) чи приватне вікно, перш ніж вважати, що щось зламалося.
- «Кешування виправляє повільний застосунок». Воно приховує повільність для повторних запитів. Перший запит усе одно повільний, і якщо коренева проблема — відсутній індекс у базі даних, виправте і її.
- «Кешувати все якомога довше». Довгі строки кешування підходять для файлів, які отримують нові імена при зміні. Для HTML-сторінок і даних безпечніші коротші строки.
- «Очищення мого кешу виправляє проблему для всіх». Воно очищує лише ваш браузер. У відвідувачів і в кешах CDN є власні копії.
Що просити у вашого ШІ-конструктора
- «Які частини цього застосунку повільні і які можна безпечно кешувати?»
- «Кешуй [популярний список / результат API] на [N] хвилин і очищай його, коли змінюються основні дані».
- «Переконайся, що жодна сторінка з персональними або обліковими даними не може кешуватися CDN чи спільним кешем».
- «Став довгі строки кешування для статичних файлів з відбитками і короткі — для HTML».
- «Кешуй відповіді від [зовнішнього API], щоб ми не викликали його при кожному завантаженні сторінки, і скажи, наскільки можуть застаріти ці дані».
- «Після публікації я бачу стару версію. Це кеш мого браузера, чи щось не розгорнуто?»
Кешування в Mythex
Після публікації оновлення в застосунку Mythex у документації зазначено, що кеші CDN можуть ненадовго відставати, а жорстке оновлення публічного URL показує нову версію — див. Як опублікувати. На сторінці Ліміти хостингу також рекомендовано кешувати статичні ресурси, адже хостинг, час роботи бази даних і трафік оплачуються з вашого балансу кредитів. Усе, що виходить за межі цього, — кешування результатів запитів або відповідей API — це те, що ви просите агента вбудувати у ваш застосунок.
Пов'язане читання: що таке CDN, як зробити ваш сайт швидшим і що таке обмеження частоти запитів.
Запитання
Що таке кешування простими словами?
Кешування означає збереження копії того, що було повільним або дорогим у отриманні, щоб наступного разу, коли це знадобиться, його можна було віддати швидко з збереженої копії. Браузери, CDN, сервери і бази даних використовують кеші, щоб застосунки працювали швидше і були дешевшими в експлуатації.
Чому я досі бачу стару версію сайту після оновлення?
Ймовірно, ваш браузер або CDN віддає збережену копію старих файлів. Жорстке оновлення (Ctrl+Shift+R у Windows, Cmd+Shift+R на Mac) зазвичай вирішує проблему. Для відвідувачів добре зроблені сайти дають оновленим файлам нові імена, щоб кеші автоматично завантажували нову версію.
Що дає очищення кешу?
Очищення кешу браузера видаляє збережені копії файлів і сторінок, тож наступного разу браузер завантажить усе заново. Це може виправити сторінки, які виглядають зламаними або застарілими, а перше завантаження після цього буде трохи повільнішим.
Чи може кешування спричинити проблеми?
Так. Основний ризик — віддача застарілих даних: старої ціни, неактуального залишку на складі або, що гірше, кешування приватної сторінки одного користувача та показ її комусь іншому. Добрі правила кешування визначають, що можна кешувати, як довго, і ніколи не кешують персональні дані у спільних кешах.