Композит отдаёт старую страницу: изменения не видны посетителям
Вы правите страницу, у себя видите новое, а посетители — старое. Или наоборот: в закрытом разделе посторонние видят то, что им не положено. И то и другое — композит.
Как он работает
Композит сохраняет готовую страницу целиком и отдаёт её мгновенно, а динамическую часть подгружает следом отдельным запросом. Отсюда все его свойства: скорость, задержка обновления и главная опасность — одна и та же сохранённая страница уходит всем.
Какой слой виноват
Кешей на сайте несколько, и «изменения не видны» означает разное. Проверяйте по порядку:
- Кеш браузера. Откройте страницу в режиме инкогнито: если там новое, дело было в вашем браузере.
- Композит. Сбросьте композитный кеш и проверьте снова в инкогнито — он отдаётся именно неавторизованным.
- Кеш компонентов. Изменился элемент каталога, а в списке старое — чистится он.
- Внешний кеш. CDN или кеширующий прокси перед сайтом отдаёт свою копию независимо от настроек.
Проверяйте всегда в инкогнито: авторизованному пользователю композит обычно не отдаётся, и вы видите свежую страницу, когда посетители видят вчерашнюю.
Опасная сторона: права доступа
Это то, о чём узнают поздно. Композит сохраняет страницу и отдаёт её до проверки прав: если раздел закрыт от неавторизованных, а страница успела попасть в композитный кеш, её увидят все, у кого есть адрес.
Поэтому правило простое: разделы с ограниченным доступом из композита исключают. Полагаться на то, что «там же авторизация», нельзя — авторизация проверяется в коде страницы, до которого при отдаче из кеша дело не доходит.
Проверить легко: откройте закрытый адрес в режиме инкогнито. Если содержимое показывается — исключайте раздел из композита немедленно.
Личные данные на общей странице
Та же природа, другое проявление. Всё индивидуальное — имя пользователя в шапке, корзина, персональные цены, скидки — должно выноситься в динамические области, которые подгружаются отдельно для каждого.
Если этого не сделать, посетитель увидит чужую корзину или чужое имя. Проверяется так: откройте сайт в инкогнито, положите товар в корзину, затем откройте в другом браузере тоже в инкогнито. Корзина не пуста — композит настроен неправильно и его нужно выключить до исправления.
Страница обновляется не вовремя
- Старое держится слишком долго. Срок жизни композитной страницы велик, а контент правят часто. Уменьшите срок или настройте сброс при изменении контента.
- Кеш сбрасывается постоянно. Обратная беда: что-то меняется в разметке при каждом запросе — идентификатор посетителя, метка времени, случайный блок. Композит считает страницу изменившейся и пересоздаёт её снова и снова, теряя весь смысл.
- Ломается вёрстка или скрипты. Слайдеры и меню перестают работать, сброс кеша помогает ненадолго. Обычно виноват встроенный в страницу скрипт, который попал в сохранённую копию не целиком.
Композит ест место
Сохранённые страницы занимают диск, и на большом сайте это десятки гигабайт. У композита есть настройка дисковой квоты, но она ограничивает только его собственное хранилище — кеш компонентов растёт отдельно и квотой не управляется.
Если место кончается, смотреть нужно оба каталога сразу. Разбор, чем занят диск, — в отдельной инструкции.
Если ничего не помогает
Проверьте, не кешируется ли страница на уровне веб-сервера и не включено ли кеширование в панели хостинга. И не чистите все слои разом на нагруженном сайте в час пик: он начнёт собирать страницы заново и может лечь под нагрузкой — делайте это в спокойное время.
Частые вопросы
Я вижу новую версию, а посетители старую.
Авторизованному пользователю композит обычно не отдаётся — вы получаете страницу напрямую. Проверять изменения нужно в режиме инкогнито или в другом браузере, где вы не авторизованы.
Закрытый раздел видно посторонним.
Композит отдаёт сохранённую страницу до проверки прав: если она попала в кеш, её увидит любой, у кого есть адрес. Разделы с ограниченным доступом нужно исключать из композита, а не полагаться на авторизацию внутри страницы.
Посетитель увидел в шапке чужое имя.
Значит блок с именем попал в статическую часть страницы. Всё индивидуальное — имя, корзина, персональные цены — выносится в динамические области, которые подгружаются отдельно для каждого посетителя.
Композитный кеш сбрасывается постоянно.
В разметке что-то меняется при каждом запросе: идентификатор посетителя, метка времени, случайный блок. Композит считает страницу изменившейся и пересоздаёт её снова, теряя смысл. Найдите меняющийся фрагмент и вынесите его в динамическую область.
Ломаются слайдер и меню, помогает сброс кеша.
Обычно встроенный в страницу скрипт попал в сохранённую копию не целиком. Проверьте, что скрипты подключаются файлами, а не встроены в разметку, и что динамические блоки размечены правильно.
Можно просто выключить композит?
Можно, и на сайте, где он настроен небрежно, это честнее, чем показывать посетителям чужие данные. Но он заметно ускоряет контентные страницы, поэтому сначала стоит разобраться с настройкой.
Композит занимает много места на диске.
У него есть настройка дисковой квоты, но она ограничивает только его хранилище: кеш компонентов растёт отдельно. Если место кончается, смотрите оба каталога сразу.