В прошлый раз мы рассмотрели, как медленная производительность сервера может отрицательно, а иногда и очень отрицательно повлиять на время загрузки вашего сайта. Причины медленного ответа сервера многочисленны и разнообразны, и они не обязательно связаны со спецификацией сервера. Диагностика и борьба с ними может быть трудной, трудоемкой и дорогостоящей задачей. Один из НАИБОЛЕЕ наиболее эффективных способов снизить влияние низкой производительности сервера — искать возможности кэширования динамического контента.

Что такое динамический контент?

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

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

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

https://www.yourdomain.com/image1.jpg

будет изменено на что-то вроде

https://cdn.yourdomain.com/image1.jpg

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

Полное кэширование страниц

Полное кэширование страниц (FPC) — это место, где кэшируется фактический HTML-документ веб-страницы.

Большинство веб-сайтов созданы с использованием систем управления контентом (CMS). Широко используемыми платформами CMS являются Wordpress, Drupal, Magento и т. д. По умолчанию при каждом просмотре страницы система CMS должна генерировать контент из своей базы данных. Однако большую часть времени это поколение совершенно не нужно. Контент либо одинаков для всех пользователей, меняется очень редко, либо разница заключается в небольшой персонализации. В каждом случае можно выполнить полностраничное кэширование, чтобы сократить время загрузки страницы и снизить нагрузку на сервер. Давайте посмотрим, какую разницу дает полностраничное кэширование одному из наших клиентов, магазину Magento 2 savvysupporter.com.au.

Загрузка основного документа перед кэшированием: 2,07 с

Загрузка основного документа после кэширования: 82 мс!!

Кэширование страницы сократило время загрузки почти на 2 секунды. Допустим, еще раз, 2 секунды!, разница в загрузке всего в 100 миллисекунд оказывает измеримое влияние на коэффициент конверсии веб-сайта… На веб-сайте Magento 2 можно кэшировать все полные страницы за пределами процесса оформления заказа и области клиента/администратора. Это может снизить нагрузку на источник примерно на 60–70% и значительно улучшить качество обслуживания клиентов.

Кэширование API (интерфейс прикладного программирования)

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

  • Информация о ценах и продукте
  • Автозаполнение формы
  • Поиск по каталогу продукции

Все это основные кандидаты на кэширование, позволяющее снизить нагрузку на ваш сервер и ускорить работу веб-сайтов.

Обработка устаревшей информации

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

  1. Установка короткого времени жизни (TTL) с помощью поставщика кэширования. Благодаря сохранению содержимого в кэше только на короткое время, например, 5 минут, кэш никогда не останется без актуальной информации в течение длительного времени. Срок действия кэшированного содержимого истечет, и новая версия будет получена с исходного сервера. Недостаток этого метода заключается в том, что, если ваш сайт не очень загружен, частота попадания в кеш может быть низкой, пользователи могут часто получать медленную загрузку страниц, а обслуживание устаревшего контента все еще возможно. Однако для очень загруженных сайтов это может быть эффективной стратегией с низкими накладными расходами.
  2. Сброс содержимого при его изменении. Эта стратегия устанавливает очень долгое время жизни в кэше, месяцы или даже годы. Когда контент обновляется, об этом сообщается в кэше и загружается новая версия. Это уведомление о новом контенте может происходить вручную или, в случае некоторых CMS, автоматически. Например, Magento 2 и Drupal 8 имеют встроенную структуру для интеграции поставщиков кэширования для обработки очистки при изменении содержимого/материалов. Эта стратегия обеспечивает очень высокий процент попаданий, но если очистка не будет точной и быстрой, это может привести к устаревшему контенту.

Заключение

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

Оригинально опубликовано на https://www.peakhour.io.