Скачать CV

DevOps

Hashed-ассеты остаются, HTML-оболочка нет

JS и CSS с хешем содержимого получают долгий max-age. Документ, который на них указывает, ревалидируется после каждого деплоя.

Имя с хешем это контракт. app.abc12.js не изменится. nginx может отдать большой max-age и флаг immutable. HTML-оболочка не может. После деплоя это единственный документ, который указывает на новые хеши. Закэшированная оболочка со ссылками на удалённые файлы это пустая страница у вернувшихся посетителей.

Шрифты и картинки теперь с теми же долгими заголовками. gzip только для текстовых типов. Сжимать webp или woff2 значит жечь CPU без выигрыша.

Hashed-ассеты неизменяемы. HTML-оболочка ревалидируется после каждого деплоя.
Hashed-ассеты неизменяемы. HTML-оболочка ревалидируется после каждого деплоя.

Обход по cookie

Анонимный GET HTML ещё идёт через короткий microcache nginx. Ключ это scheme, host, uri и локаль. Query-строки, которые не меняют страницу, в ключ не входят. Запросы с auth_token этот кэш обходят. Вошедший пользователь не должен получить публичный фрагмент.

JSON под /api остаётся у PHP. Кэш API в nginx смешивал список одной локали с записью из другой вкладки.

Запрос со входом и auth_token никогда не получает публичный фрагмент.
Запрос со входом и auth_token никогда не получает публичный фрагмент.

Проверка после сборки

Открыть страницу. Убедиться, что оболочка ревалидируется. Убедиться, что JS и CSS приходят с большим max-age. Нет манифеста Vite хуже, чем 500. Страница рендерится без CSS и выглядит сломанной, а не падает.

Правило короткое. Hashed-файлы неизменяемы. HTML-оболочка нет. Cookie обходит общий HTML-кэш. Это обновление nginx на этом сайте.

К новостям