Руководства

Что такое кэширование? Простое руководство для создателей приложений

Кэширование означает хранение готовой копии того, что было медленным или дорогим в получении, чтобы следующий запрос на это можно было ответить быстро, взяв копию. Сохранённая копия называется кэшем. Ваш браузер кэширует изображения, чтобы сайт открывался быстрее при втором визите; сервер кэширует результат медленного запроса к базе, чтобы не выполнять его для каждого посетителя.

Кэширование делает приложения быстрее и дешевле в эксплуатации. Его главный компромисс в том, что копия может устареть.

Почему кэширование важно, когда вы создаёте приложение с ИИ

С кэшированием в приложениях, созданных ИИ, вы столкнётесь тремя способами:

  • «Я обновил приложение, но вижу старую версию». Это самый частый случай, и обычно он безвреден: ваш браузер или 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 товаров с ценами и остатками из базы данных, а также список «в тренде», для которого нужен медленный расчёт по всем заказам.

  1. Изображения и скрипты кэшируются браузером и CDN на долгое время. Каждая новая сборка даёт изменённым файлам новые имена, поэтому обновления всё равно появляются.
  2. Список «в тренде» пересчитывается раз в 10 минут и хранится в кэше приложения. Каждый посетитель в эти 10 минут получает сохранённый результат мгновенно.
  3. Цены кэшируются на короткое время, а кэш очищается при каждом изменении товара, чтобы покупатели никогда надолго не видели старую цену.
  4. Остаток на складе при оформлении никогда не кэшируется. Когда кто-то нажимает «Купить», приложение проверяет реальную базу, поэтому не может продать товар, который только что закончился.
  5. Страницы корзины и аккаунта никогда не хранятся в общих кэшах, потому что они личные.

Результат: главная страница быстрая, база делает значительно меньше работы, а ничего важного для денег или приватности никогда не устаревает.

Ключевые термины

ТерминЗначение
Попадание / промах кэша (hit / miss)Данные найдены в кэше / их пришлось получить из источника.
TTL (time to live)Как долго копия в кэше считается актуальной.
Устаревшие данные (stale)Копия в кэше, которая уже не соответствует оригиналу.
ИнвалидацияНамеренное удаление копии из кэша, потому что оригинал изменился.
Cache bustingСмена имени или URL файла при его изменении, чтобы кэши загружали новую версию.
Cache-ControlHTTP-заголовок, который сообщает браузерам и 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) обычно решает проблему. Для посетителей хорошо построенные сайты дают обновлённым файлам новые имена, чтобы кэши сами загружали новую версию.

Что делает очистка кэша?

Очистка кэша браузера удаляет сохранённые копии файлов и страниц, поэтому в следующий раз всё загрузится заново. Это может исправить страницы, которые выглядят сломанными или устаревшими; при первом открытии после очистки страницы загрузятся немного медленнее.

Может ли кэширование вызывать проблемы?

Да. Главный риск — выдача устаревших данных: старой цены, неактуального остатка на складе или, что хуже, кэширование приватной страницы одного пользователя и показ её кому-то другому. Хорошие правила кэширования определяют, что можно кэшировать, как долго и почему никогда нельзя хранить персональные данные в общих кэшах.

Mythex · Pricing · Создавайте что угодно с ИИ · Шаблоны сайтов и приложений · Сравнения Mythex · Глоссарий по созданию приложений с ИИ · Бесплатные инструменты для создания приложений с ИИ · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)