awesome-everything EN
↑ Обратно к восхождению

Кеширование

SWR: чтение заголовков и конфига

Суть Читай реальные заголовки Cache-Control, логи edge и конфиг клиента SWR, затем предсказывай поведение свежести и фикс с наибольшим рычагом.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 14 min

SWR настраивается заголовком и парой строк клиентского конфига, а диагностируется в логе edge. Прочитай каждый, проследи, что кэш реально делает, и выбери фикс, который сеньор сделает первым.

Цель

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

Сниппет 1 — таймлайн заголовка

Cache-Control: max-age=60, stale-while-revalidate=300, stale-if-error=86400
t=0s    закэшировано свежим
t=45s   запрос  -> свежий hit, без вызова origin
t=150s  запрос  -> ???
t=600s  запрос, origin вернул 503 -> ???
Викторина

Сопоставляя заголовок с таймлайном, какая строка верна?

Сниппет 2 — лог ревалидации edge

key=/catalog  HIT-STALE   revalidate=spawned   origin_inflight=1
key=/catalog  HIT-STALE   revalidate=spawned   origin_inflight=2
key=/catalog  HIT-STALE   revalidate=spawned   origin_inflight=874
...
origin  p99 1.9s -> 41s   5xx_rate 0% -> 12%
Викторина

Лог показывает рост origin_inflight до сотен для одного ключа. Что происходит и какой фикс?

Сниппет 3 — конфиг клиента SWR

const { data } = useSWR('/api/quote', fetcher, {
  dedupingInterval: 2000,
  revalidateOnFocus: true,
  revalidateOnReconnect: true,
})
Викторина

Пользователь оставил вкладку открытой на час, затем кликнул обратно в неё. Что делает клиент SWR, и что сделали бы два параллельных монтирования этого хука в одном тике?

Сниппет 4 — кэширование проверки auth

GET /api/permissions/user-42
Cache-Control: max-age=60, stale-while-revalidate=600
Викторина

Этот заголовок применён к по-пользовательскому эндпоинту прав. В чём дефект?

Итог

Каждый инцидент свежести читается в заголовке, логе или конфиге. Слоёный заголовок — это три вложенных окна: свежее, stale-while-revalidate, stale-if-error — и запрос трассируется по тому, в какое окно попадает его метка времени. Лог edge с растущим origin_inflight по одному ключу — это стадо фоновых обновлений, чинимое single-flight плюс джиттером, а не перезапуском. Клиентский конфиг воспроизводит модель: ревалидация на focus/reconnect работает stale-first, а dedupingInterval коалесцирует параллельные вызовы. И ни один заголовок нигде не делает SWR безопасным на решении об авторизации.

Продолжить восхождение ↑SWR: сгладить пилу ревалидации
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.