Что такое кэширование? Простое руководство для создателей приложений
Кэширование означает хранение готовой копии того, что было медленным или дорогим в получении, чтобы следующий запрос на это можно было ответить быстро, взяв копию. Сохранённая копия называется кэшем. Ваш браузер кэширует изображения, чтобы сайт открывался быстрее при втором визите; сервер кэширует результат медленного запроса к базе, чтобы не выполнять его для каждого посетителя.
Кэширование делает приложения быстрее и дешевле в эксплуатации. Его главный компромисс в том, что копия может устареть.
Почему кэширование важно, когда вы создаёте приложение с ИИ
С кэшированием в приложениях, созданных ИИ, вы столкнётесь тремя способами:
- «Я обновил приложение, но вижу старую версию». Это самый частый случай, и обычно он безвреден: ваш браузер или CDN показывает сохранённую копию.
- Скорость. Если страница медленная, потому что для каждого посетителя заново считает одни и те же числа, кэширование результата может сделать её почти мгновенной.
- Стоимость. Многие ИИ-конструкторы и хостинги берут плату за вычисления, время работы базы и внешние API-вызовы. Если тысяча посетителей запускает один и тот же дорогой запрос, кэширование позволяет заплатить за него один раз.
Знание основ помогает просить кэширование там, где оно полезно, и замечать его, когда именно оно является причиной странного поведения.
Бытовая аналогия
Представьте кухню оживлённого кафе.
Каждое утро повар мог бы заваривать каждый кофе из свежемолотых зёрен в момент заказа. Это медленно. Вместо этого он держит на подогреве готовый кофе из фильтра. Большинство гостей получают чашку за секунды — это попадание в кэш (cache hit). Когда кофе заканчивается, варят новый — это промах кэша (cache miss).
Но кофе, простоявший слишком долго, становится невкусным, поэтому в кафе есть правило: выбрасывать любой кофейник старше 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 минут получает сохранённый результат мгновенно.
- Цены кэшируются на короткое время, а кэш очищается при каждом изменении товара, чтобы покупатели никогда надолго не видели старую цену.
- Остаток на складе при оформлении никогда не кэшируется. Когда кто-то нажимает «Купить», приложение проверяет реальную базу, поэтому не может продать товар, который только что закончился.
- Страницы корзины и аккаунта никогда не хранятся в общих кэшах, потому что они личные.
Результат: главная страница быстрая, база делает значительно меньше работы, а ничего важного для денег или приватности никогда не устаревает.
Ключевые термины
| Термин | Значение |
|---|---|
| Попадание / промах кэша (hit / miss) | Данные найдены в кэше / их пришлось получить из источника. |
| TTL (time to live) | Как долго копия в кэше считается актуальной. |
| Устаревшие данные (stale) | Копия в кэше, которая уже не соответствует оригиналу. |
| Инвалидация | Намеренное удаление копии из кэша, потому что оригинал изменился. |
| Cache busting | Смена имени или URL файла при его изменении, чтобы кэши загружали новую версию. |
| Cache-Control | HTTP-заголовок, который сообщает браузерам и CDN, как кэшировать ответ. |
| Жёсткая перезагрузка (hard refresh) | Перезагрузка страницы с указанием браузеру игнорировать свой кэш. |
| 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) обычно решает проблему. Для посетителей хорошо построенные сайты дают обновлённым файлам новые имена, чтобы кэши сами загружали новую версию.
Что делает очистка кэша?
Очистка кэша браузера удаляет сохранённые копии файлов и страниц, поэтому в следующий раз всё загрузится заново. Это может исправить страницы, которые выглядят сломанными или устаревшими; при первом открытии после очистки страницы загрузятся немного медленнее.
Может ли кэширование вызывать проблемы?
Да. Главный риск — выдача устаревших данных: старой цены, неактуального остатка на складе или, что хуже, кэширование приватной страницы одного пользователя и показ её кому-то другому. Хорошие правила кэширования определяют, что можно кэшировать, как долго и почему никогда нельзя хранить персональные данные в общих кэшах.