В статье подробно разбираю кэширование сайтов: что это такое, почему это важно, как настроить, самые лучшие плагины.
При создании нового сайта и доработки существующего важно учитывать не только функциональность и представление информации, но и скорость ее загрузки на компьютерах посетителей.
Обычный посетитель не будет ждать, пока откроется сайт, который ему не нужен, и перейдет на сайт конкурента, чтобы найти нужный продукт или информацию. Поэтому кэширование может стать первым и очень важным шагом в ускорении работы сайта.
Если вы обнаружили, что ваш сайт работает неудовлетворительно, в первую очередь необходимо выяснить причину и обстоятельства медленной работы — возможно, медленным является не сайт в целом, а конкретная страница или функция (например, фильтр продуктов).
Случается, что мы обращаемся к поисковому гиганту Google по самым разным вопросам, в том числе в попытке ускорить работу сайта, и надеемся найти правильный ответ.
Однако это не всегда правильное решение, особенно когда речь идет о скорости работы сайта. Сайты уникальны, с разным программным кодом, разной информацией и разными привычками посетителей, поэтому даже статья, которая выглядит очень убедительно, может не быть правильной рекомендацией для конкретного сайта.
Для ускорения работы сайта необходимо определить причину его медленной работы и подобрать соответствующее решение.
Часто, когда сайт тестируется с помощью различных инструментов, найденных в Интернете, результатом является то, что самый длинный запрос занимает самое большое время (Time To First Byte). Или, иначе, самое большое время ответа сервера (Server Response Time).
Естественно предположить, что медлительность сайта связана с недостаточной мощностью сервера или ограничениями сервера, но на самом деле это означает, что серверу требуется много времени для выполнения кода сайта.
Чем сложнее код, тем больше времени занимает первый запрос к серверу (выполнение кода). Это означает, что если сложный код выполняется дольше, его нужно упростить, и самый простой способ сделать это – использовать различные решения для кэширования.
Как работает кэширование
Для ускорения рендеринга сайта, который включает сложные вычисления или другой программный код, статическая версия страницы хранится во временной памяти. Когда посетитель открывает страницу, она рендерится из временного хранилища.
Типичная операция кэширования выглядит следующим образом:
- посетитель заходит на сайт
- браузер отправляет запрос в кэш;
- если запрашиваемый контент уже находится в кэше, он отображается в браузере посетителя. Если он не существует, код выполняется, и ответ отправляется браузеру;
- если содержимое или страница, запрашиваемая посетителем, может быть кэширована, она сохраняется, и при повторном выполнении того же запроса результат возвращается уже из кэша.
Методы
Обычно, когда программист создает сайт, он сразу же использует специальные функции, которые позволяют сохранить страницу или ее части в браузере посетителя на определенное время.
Это сокращает время открытия страницы, поскольку часть содержимого (например, изображения) уже хранится локально на компьютере и больше не нуждается в повторной загрузке на сервер. Однако чем больше функций и опций для посетителей на сайте, тем больше контента необходимо загружать.
Часто бывает недостаточно кэшировать изображения или статические файлы в браузере посетителя, но и сохранять результаты различных вычислений или даже целые страницы.
Различные системы управления контентом имеют такую возможность, и то, как и что они хранят, зависит от их возможностей и контента, который они хотят хранить.
Например, плагин W3 Total Cache для WordPress позволяет выбирать между несколькими методами кэширования, но есть некоторые системы (например, Joomla), которые используют определенные правила кэширования и не дают вам выбора.
Выбор метода кэширования должен основываться на том, что является причиной медлительности сайта. Например, если наиболее трудоемкой частью сайта является выполнение кода, сайт можно ускорить с помощью OPcache.
Между тем, если требуется длительное ожидание обработки данных, можно использовать один из методов объектно-ориентированного кэширования, например Memcached или Redis.
Файловая система
Наиболее распространенным способом взлома сайта является хранение его страниц в файловой системе, то есть в специальном каталоге вместе с другими файлами, необходимыми для функционирования сайта.
Этот каталог обычно называют кэшем. Этот каталог создает статическую страницу в формате HTML, так что когда посетитель открывает страницу, ему предоставляется статическое изображение этой страницы из каталога кэша, без необходимости обращаться к базе данных, выполнять вычисления и тратить время.
Этот тип кэширования обычно подходит для небольших сайтов. Однако если сайт получает большое количество посетителей или имеет большое количество продуктов, кэширование в файловой системе может даже навредить.
При накоплении большого количества файлов кэша и увеличении размера каталога кэша может возникнуть несколько проблем.
Во-первых, увеличивается общее количество файлов, размещаемых на сервере, что часто может быть связано с увеличением стоимости тарифного плана хостинга.
Во-вторых, чем больше файлов в каталоге, тем больше файлов серверу придется перебрать, прежде чем будет найден и прочитан нужный файл кэша.
Преимущество кэширования данных в файловой системе заключается в том, что этот метод можно использовать для кэширования сайтов, размещенных на любом сервере, поскольку он не требует специального программного обеспечения на сервере.
Системы кэширования
Теперь рассмотрим какими способами можно кэшировать сайт
Memcached
Memcached – это система кэширования, которая хранит данные в памяти сервера (RAM). Он используется для ускорения работы динамических сайтов и приложений за счет снижения нагрузки на базу данных.
Обычно при обращении к базе данных нагрузка на сервер возрастает, а Memcached позволяет снизить эту дополнительную нагрузку, храня объекты данных (например, результаты запроса MySQL) в динамической памяти.
Одним из преимуществ Memcached является то, что для кэширования можно использовать несколько отдельных серверов. Сервер приложений обращается к одному из нескольких кэширующих серверов, тем самым снижая нагрузку на серверы в случае высокой посещаемости сайта.
Этот метод кэширования полезен, когда вам нужно кэшировать небольшие и неизменяемые данные, например, фрагменты HTML-кода.
Внутреннее управление памятью Memcached более эффективно при сохранении простых данных, поскольку оно использует меньше памяти для обработки метаданных. Memcached поддерживает только текстовые данные, что делает его идеальным для хранения данных только для чтения без необходимости дополнительной обработки или манипуляций.
Memcached установлен и готов к использованию на всех профессиональных хостинг-серверах. Поэтому, если приложение, размещенное на сервере, поддерживает кэширование Memcached, его можно выбрать и использовать.
Важно знать, что сервер Memcached доступен с того же сервера по адресу localhost и порту 11211.
Redis
Redis — это еще одна система для хранения и обработки данных в памяти сервера. Его применение довольно широко и не ограничивается кэшированием. Он может заменить обычную базу данных MySQL и хранить часто меняющиеся данные, такие как чат, различные турнирные таблицы, данные сессии и так далее.
Он работает аналогично Memcached и, поскольку ему не нужно считывать информацию с диска, чтобы использовать сохраненную информацию, он сокращает время извлечения данных до миллисекунд.
В отличие от Memcached, Redis позволяет хранить широкий спектр данных, от текстовых до списков и сложных наборов данных. Эта система обеспечивает большую гибкость в отношении объектов, которые можно кэшировать.
Если Memcached ограничивает длину имен записей 250 байтами и работает только с обычными текстовыми записями, то Redis допускает имена и значения записей размером до 512 МБ, которые могут быть любого типа, кроме обычного текста.
Служба Redis также включена в каждую профессиональную хостинг-платформу, но по умолчанию не запускается на серверах. Она может запускаться по требованию и включать расширение PHP для указанного клиентом пользователя, чтобы страница, основанная на языке программирования PHP, могла взаимодействовать с сервисом Redis и использовать его для кэширования.
Плагин WordPress для кэширования
В отличие от других систем управления содержимым сайта, в ядре WordPress нет опций кэширования по умолчанию. Поэтому, чтобы кэшировать содержимое своего сайта, необходимо установить дополнительный плагин.
В WordPress существует множество плагинов кэширования, которые различаются по своим возможностям. Некоторые из них позволяют включить кэширование вашего сайта несколькими нажатиями кнопки, при этом настройки выбирает разработчик плагина, в то время как другие позволяют разработчику сайта выбрать настройки кэширования, наиболее подходящие для конкретного сайта.
Обзор самых популярных плагинов кэширования для системы WordPress
W3 Total Cache
Один из самых популярных и часто используемых на сайтах плагинов, W3 Total Cache имеет широкий спектр настроек.
Разработчик сайта может выбрать, какие части сайта кэшировать, где хранить кэшированную информацию — в файловой системе или во временной памяти RAM, а также установить различные способы оптимизации статического контента (JavaScript и CSS).
Например, для сокращения времени ответа на первый запрос информация о странице может храниться в файловой системе, а для ускорения времени создания записи или страницы данные кэша базы данных могут храниться в оперативной памяти с помощью Redis или Memcached.
Этот плагин может быть слишком сложным для пользователя с низкими техническими знаниями, но он предлагает много возможностей для профессионального разработчика.
WP Super Cache
Этот плагин также часто используется и нравится разработчикам сайтов, но с гораздо меньшими возможностями настройки, чем W3 Total Cache. WP Super Cache имеет два режима — Easy и Advanced.
Легкий режим имеет только одну настройку — возможность включить или отключить кэширование. Включение этой функции применяет стандартные правила кэширования и устанавливает, что страницы не будут кэшироваться вошедшими в систему пользователями, иначе люди, создающие записи, не увидят внесенных ими изменений.
Настройки для опытных пользователей дают вам немного больше возможностей. Например, вы можете установить, нужно ли сжимать контент, очищать кэш при публикации нового сообщения, выбрать, какие типы страниц не будут кэшироваться и так далее.
Однако этот плагин кэширует только в файловой системе, и нет возможности кэшировать в оперативной памяти.
WP Fastest Cache
Простой и удобный в использовании, WP Fastest Cache позволяет ускорить работу вашего сайта всего несколькими щелчками мыши.
Как и другие популярные плагины, он может оптимизировать статический контент, очищать кэш после создания новой страницы или сообщения, указывать страницы, которые не нужно кэшировать, и отключать кэширование для вошедших в систему пользователей.
При выборе этого плагина автоматически применяются настройки, выбранные разработчиками плагина, и используется файловая система для кэширования.
Сравнение плагинов
Для того чтобы сравнить возможности рассмотренных в этой статье плагинов, исследователями была создана тестовая страница с огромным количеством записей в блоге.
Каждый пост содержал как минимум одну фотографию хорошего качества, несколько связанных постов с фотографиями и комментариями. Эта тестовая страница занимала 7,28 МБ, что в несколько раз превышает рекомендуемый размер сайта. Для рендеринга страницы в браузере потребовалось 3,76 секунды, а время отклика на первый запрос составило 2437 мс.
Результаты были явно улучшены при установке любого из перечисленных выше плагинов кэширования. Размер сайта не уменьшился значительно из-за большого количества используемых изображений, но время полной загрузки сократилось вдвое, а время ответа на первый запрос уменьшилось примерно в сорок раз.
При включенном WP Fastest Cache с базовыми настройками сайт отображался в браузере за 1,18 секунды, а время ответа на первый запрос сократилось до 55 мс. Плагин W3 Total Cache с различными методами кэширования (использование файловой системы, Redis или Memcached) ускорил работу сайта до 1,19-1,68 с и сократил время ответа на первый запрос до 23-55 мс.
Для достижения еще лучших результатов следует поэкспериментировать с различными настройками, чтобы найти те, которые лучше всего подходят для данного конкретного сайта.
К сожалению, плагин WP Super Cache показал наихудшие результаты в этом тесте: 1,66 секунды для загрузки сайта в простом режиме и 308 мс для выполнения кода. Между тем, в расширенном режиме сайт открылся за 1,56 секунды, а первый запрос занял 58 мс.
Я пользуюсь WP Fastest Cache на всех своих сайтах
Вывод
Кэширование — один из самых простых способов ускорить работу сайта, особенно если сайт создан с использованием популярной системы управления контентом.
Однако важно помнить, что этот метод кэширования решает только часть проблем медленного сайта, и что при его кэшировании следует выбирать методы, подходящие для решения конкретных проблем сайта, например, оптимизацию изображений.
Также не следует использовать более одного плагина кэширования, как бы ни казалось, что это поможет. Несколько плагинов не ускорят работу сайта, более того, они могут конфликтовать друг с другом и даже замедлить его работу.