Кэширование страниц сайта: подводные камни, о которых часто молчат

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

Существует много видов кеша. В этой статье мы будем говорить о кешировании страниц сайта на стороне сервера. Итак, для чего нам вообще кешировать страницы на сервере?

Кеширование страниц сайта

В чём смысл кеширования страниц сайта?

Когда браузер отправляет запрос открыть страницу, сервер обрабатывает его: выполняет программный код, собирает информацию из базы данных и формирует HTML-документ. Это и есть страница сайта. Пока браузер её не получил, он ничего не может сделать. Время, за которое сервер обрабатывает эти процессы и отправляет документ, называют временем ответа сервера или Time To First Byte (TTFB).

На время ответа сервера существенно влияет количество и качество программного кода, качество базы данных, количество вычислительных ресурсов на сервере и посещаемость сайта. Поскольку TTFB измеряется до получения первого байта, к факторам влияния можно также отнести расстояние от сервера до пользователя и скорость соединения.

Кеширование страниц приводит к тому, что когда страница сформирована, она запоминается в памяти сервера (в кеше), и при следующем запросе этой страницы процесс генерации уже не происходит, а пользователю отправляется уже готовый документ, что значительно снижает TTFB, особенно на медленных сайтах.

Можно ли считать кеширование ускорением сайта?

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

Но я не могу назвать это ускорением. Кеширование - это не оптимизация процесса создания страницы, это изменение этого процесса. Это очень важно понимать, потому что это имеет последствия, ведь сайт начинает по-другому функционировать, и это может быть трудно заметить.

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

Кеширование страниц сайта

Какие проблемы стоит ожидать при использовании кеша страниц сайта?

Перед рассмотрением проблем отмечу, что ни одна из них не является обязательным следствием. Система кеширования может быть очень качественной, но это большая редкость, и бывает только там, где эта система создана кастомно под задачи конкретного проекта. Но везде, где за кеширование отвечает стандартный плагин CMS, будут наблюдаться указанные ниже проблемы.

Для рассмотрения проблем давайте представим вполне реальную ситуацию. Сайт имеет TTFB 1,5 секунды. Установили плагин кеширования, и TTFB упал до 0,05 секунды. Заказчик видит, что сайт начал летать, и он очень рад такой оптимизации. Но он не тестирует сайт тщательно, не использует его как покупатель и не видит подводных камней в виде неактуальной информации, медленных некешированных страниц, медленных страниц после обновления кеша и вообще не видит реальной картины скорости сайта.

Неактуальность информации о товаре

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

Но мы сталкиваемся с обновлением кеша, то есть страница снова должна сгенерироваться за 1,5 секунды. А изменение цены одного товара запустит обновление всего кеша, потому что очень трудно учесть все точечные связи этого товара. Он отображается в категориях, в рекомендованных товарах, в других модулях, и везде нужно обновить информацию.

Чем обернётся для вас обновление кеша - зависит от логики модуля. Он может либо генерировать новый кеш для каждой страницы, когда на неё впервые зайдёт человек, и эти посещения будут медленными. Либо же машина запустит автоматическое генерирование кеша всех страниц, что вполне может положить вам сервер. Чаще используется первый вариант. Но если на сайте вручную меняют цены и остатки, это постоянно запускает процесс сброса кеша, и очень часто ваши покупатели будут видеть сайт медленным, хотя вы можете этого не замечать. И даже при жалобах на скорость владельцы сайта часто думают, что проблема в скорости интернета пользователя, ведь у них сайт открывается быстро.

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

Отсутствие персонализации

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

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

Кеширование страниц сайта

Некешированные страницы

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

Такими страницами могут быть страницы результатов фильтрации (если фильтр сторонний и у него нет собственного кеша), страницы блога или отзывов. Также иногда стандартными модулями кеша не предусмотрены стандартные для CMS технические страницы. Например: страницы пагинации, сортировки, результатов поиска.

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

Сборка мусора и обслуживание кеша

При работе кеширования на сервере в памяти будет находиться много кешированных страниц. Время от времени сервер должен оценить их актуальность и удалить устаревший мусор. Если у сайта много страниц и много посетителей, то количество страниц в кеше может быть астрономическим. В этих условиях на оценку актуальности может тратиться слишком много процессорных ресурсов и времени, что может значительно замедлять работу сайта. Это касается не только работы с мусором, но и другого технического обслуживания кеширования, которое значительно сложнее объяснить.

Неосознание реальности

Кеш может скрывать реальные проблемы со скоростью. С момента подключения кеша на сайте могла увеличиться посещаемость и активность ботов, а реальный TTFB мог достигнуть 5 секунд, но владелец сайта об этом не знает, потому что это ему не попадалось на глаза. Но мы уже разобрали, что при реальном использовании сайта посетители могут часто сталкиваться с некешированными страницами, которые становятся всё медленнее.

В чём главная проблема использования кеширования страниц?

Главная проблема в непонимании того, что это за инструмент, как он работает и когда его стоит применять.

Кеш стоит применять только на сайтах, которые уже быстрые сами по себе, - для работы с нагрузкой.

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

Этот инструмент нужен крупным высоконагруженным сайтам, которые уже сделали всё возможное для оптимизации нагрузки.

FAQ

Ускоряет ли кэширование сайт?

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

Почему после установки кэша некоторые страницы сайта работают медленно?

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

Кому действительно нужно кэширование страниц?

Большим высоконагруженным сайтам, уже проведшим всю возможную оптимизацию кода и базы данных, но этого недостаточно для работы под нагрузкой. Кэширование можно использовать для улучшения TTFB небольших медленных сайтов, на которых не меняется информация (лендинги, визитки).

Можно ли кэшировать страницы без побочных эффектов?

Теоретически, если система кэширования кастомно разработана под конкретный проект с учетом всех его особенностей. Но это большая редкость и может быть существенно дороже реального ускорения сайта.

Свяжитесь с нами
или *
Нажимая кнопку «Отправить», Вы даете согласие на обработку персональных данных