Кэш на неделю и живые данные кажутся несовместимыми: остатки на складе меняются каждый час, редактору нужна кнопка «изменить», счётчик просмотров растёт. Решение во всех случаях одно — HTML одинаковый для всех, а живое дорисовывается отдельно.

Это десятая часть цикла «Кэш страниц без MISS».

Остатки из 1С

В каталоге наличие и остатки обновляются обменом с 1С. Если выводить их в HTML, каждый обмен должен сбрасывать страницы — а это волны сбросов по всему каталогу. Мы сделали иначе:

  1. в HTML товара — пустой слот под наличие;
  2. скрипт после загрузки запрашивает статус у отдельного адреса API;
  3. у этого адреса свой короткий кэш в nginx на 30 секунд (так называемый микрокэш): сотня посетителей за полминуты даёт один запрос к PHP;
  4. запись остатков обменом не сбрасывает кэш страниц вообще.
location = /wp-json/stock/v1/status {
    fastcgi_cache WORDPRESS;
    fastcgi_cache_valid 200 30s;
    # остальное — как у обычного PHP
}

При переходе на кэш на неделю этот адрес не трогайте: менять надо только общее правило для страниц.

Кнопки для редактора

Залогиненные идут мимо кэша, поэтому серверу можно добавить им класс на body. Сами кнопки «изменить», ссылки в админку и подсказки дорисовывает скрипт, который подгружается отдельно только при этом классе. Данные для кнопок — в data-*-атрибутах общей разметки, одинаковой для всех.

Анонимный HTML не меняется ни на байт, а редактор видит свою панель.

Просмотры и лайки

Счётчик просмотров — ajax-запрос после загрузки (почему не кукой при рендере — седьмая часть). Лайк — тоже ajax; после него сервер чистит и сразу прогревает страницу, чтобы общее число обновилось для всех (восьмая часть).

Схема в одну строку

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

Нужен кэш, но на страницах живые данные?

Пришлите адрес — подскажу, что вынести в отдельные запросы.

· полезно?
АЧ
Алексей Чикун веб-разработчик, команда TRIOHEAD

Делаю сайты и сервисы целиком: от вёрстки до сервера. Пишу о том, что проверил на своих проектах.

Комментарии

// загружаю комментарии…

Комментарии публикуются после проверки. Ссылки и HTML не принимаются.