Что такое концепция кэширования

Ответ

Кэширование — это техника хранения данных в быстродоступном хранилище (кэше) для ускорения последующих запросов. В вебе кэширование применяется на разных уровнях: браузер, CDN, сервер.

Пример с HTTP-кэшированием:

Cache-Control: max-age=3600

Этот заголовок указывает браузеру хранить ресурс 1 час.

Типы кэширования:

  1. Браузерный (localStorage, sessionStorage)
  2. HTTP-кэш (Cache-Control, ETag)
  3. CDN-кэширование
  4. Серверный кэш (Redis, Memcached)

Пример кода (Service Worker):

self.addEventListener('fetch', (event) => {
  event.respondWith(
    caches.match(event.request)
      .then(response => response || fetch(event.request))
  );
});

Кэширование улучшает производительность, но требует управления инвалидацией данных.

Ответ 18+ 🔞

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

Вот смотри, в вебе этой хуйни на каждом углу. Браузер твой, хитрая жопа, тоже кэширует. Скачал картинку — и всё, лежит у тебя, пока не скажут обновить. А ещё эти заголовки HTTP, от которых мозг плавится. Типа:

Cache-Control: max-age=3600

Перевод на русский: «Не трогай эту хуйню целый час, а потом спроси снова». Просто, а? А то без этого каждый запрос — как в прорубь зимой: долго, мучительно и можно обоссаться от нетерпения.

Вот где эта манда с ушами обычно прячется:

  1. В браузереlocalStorage, sessionStorage. Типа твоя личная тумбочка в интернете.
  2. HTTP-кэш — вот эти вот заголовки (Cache-Control, ETag). Браузер и сервер договариваются, кто что и когда обновил.
  3. CDN-кэширование — это когда твои статичные файлы (картинки, скрипты) лежат не на одном сервере в Сибири, а разбросаны по миру, как говно по тайге. Быстрее доезжает.
  4. Серверный кэш — тут уже серьёзные игрушки: Redis, Memcached. Сервер сам результаты тяжёлых запросов складывает в память, чтобы не ебашить базу данных по каждому чиху.

А вот, смотри, пример кода для Service Worker'а, эта такая штука в браузере, которая может перехватывать запросы:

self.addEventListener('fetch', (event) => {
  event.respondWith(
    caches.match(event.request)
      .then(response => response || fetch(event.request))
  );
});

Что здесь происходит? А вот что: «Слушай, дружок-пирожок, если у меня в кэше уже есть ответ на этот запрос — на, получай сразу. Нету? Ну, извини, тогда пойду, пошарюсь в сети, как бомж по помойке».

В общем, штука овердохуище полезная, производительность летит вверх, как ракета. Но есть одна, блядь, проблема — инвалидация кэша. Это когда данные на сервере поменялись, а у тебя в кэше лежит старая хуйня. И ты юзеру показываешь вчерашние цены, а он уже купил, ебать, акции и обосрался. Надо всегда помнить, когда эту заначку пора выкинуть и набрать свежей. А то будет пиздец, а не оптимизация.