Что такое кэширование
Кэширование - это “складирование” информации в хранилище быстрого доступа (кэш) для ускорения работы web-сайта. Используется специальный буфер для промежуточного сохранения данных, доступ к которому происходит намного быстрее, чем к источнику данных.
Применительно к сфере хостинга и сайтостроения можно описать несколько ситуаций, в которых используется кэширование:
- кэширование страниц и изображений в браузере пользователя;
- серверное кэширование страниц сайта;
- кэширование кода интерпретатора PHP;
- кэширование запросов к базе данных.
HTTP-кэширование страниц и изображений в браузере
Все данные, которые загружает пользователь через браузер, можно разделить на два типа:
- статические;
- динамические.
Статические данные - это файлы:
- изображений и шрифтов;
- стилей CSS и скриптов JavaScript.
Динамические данные - это вся информация, хранящаяся в базе данных (учетные записи пользователей, списки товаров, новостей и т.д.)
Принцип действия кэширования
1. Когда сайт загружается в браузер, тратится время на получение с сервера всех компонентов, из которых состоит страница.
2. Не изменяющиеся статические данные загружаются лишь один раз, а затем хранятся в файловом кэше браузера на компьютере пользователя.
3. При повторном заходе на страницу браузер уже не закачивает эти данные с сервера, а отображает их прямо из своего кэша, экономя время на загрузку и пропускную способность канала связи с интернетом.
Эта технология называется кэширование интернет-ресурсов в браузере или HTTP-кэширование.
Чтобы управлять HTTP-кэшированием, браузер использует специальные HTTP-заголовки Expires и Cache-control, которые отправляет web-сервер при отдаче страниц.
Примеры заголовков
Просмотреть HTTP-заголовки ответа сервера можно при помощи специальных онлайн-сервисов.
1. Например, в SEO-auditor нужно в специальном поле указать URL проверяемой страницы. Во втором поле выбрать в выпадающем списке браузер, которым вы пользуетесь в данный момент.
2. После этого нажмите на кнопку “Проверить”и дождитесь результата.
Expires: Thu, 21 Aug 2021 01:00:00 GMT
Заголовок означает, что конкретная страница не будет изменяться до часа ночи 21 августа 2021-го года. До истечения этого времени при запросе данного ресурса браузеру необходимо брать ее из кэша, а по истечении - снова скачать с сервера.
Cache-Control: max-age=3600
Заголовок означает, что страница с момента скачивания браузером гарантированно не будет меняться в течение 3600 секунд, то есть одного часа. На протяжении этого времени при повторном запросе браузеру предписано брать ее из кэша.
Также браузер может взаимодействовать с web-сервером, посылая запрос о том, была ли изменена конкретная страница за определенное время. В этом случае web-сервер отправляет вместе со страницей заголовок Last-Modified с указанием времени последнего изменения страницы, например:
Last-Modified: Sun, 1 Aug 2020 01:00:00 GMT.
После этого браузер при каждом обращении к странице посылает заголовок запроса If-Modified-Since, например, If-Modified-Since: San , 1 Aug 2020 01:00:00 GMT.
Если web-сервер знает, что с момента времени, указанного в запросе, страница не менялась, то он отвечает специальным кодом HTTP 304 (Not Modified), увидев который, браузер заберет страницу из кэша. В противном случае происходит загрузка новой версии страницы с сервера (и заодно получение нового заголовка Last-Modified).
К недостаткам этой схемы HTTP-кэширования можно отнести необходимость постоянных запросов от браузера к серверу.
Вместо HTTP-заголовков Last-Modified и If-Modified-Since, можно использовать другую комбинацию заголовков: ETag и If-None-Match, принцип действия которых аналогичен.
Сценарий работы HTTP-кэширования должен выглядеть так.
Нужно, чтобы ответ сервера для запроса браузером страницы содержал сразу два заголовка: Last-Modified и Cache-Control/Expires. Браузер будет выбирать оптимальную стратегию для кэширования, исходя из содержащейся в них информации.
Настройка кэширования в браузере со стороны web-сервера
Рассмотрим, как можно настроить кэширование страниц в браузере для популярного web-сервера Apache.
Если вы используете виртуальный хостинг, то настройка кэширования производится с помощью служебного файла .htaccess, расположенного в корневой папке сайта.
Например, чтобы включить HTTP-кэширование в браузере пользователя для файлов с изображениями сроком на 1 месяц, а для файлов скриптов и CSS - на 1 неделю, нужно добавить следующие строки в файле .htaccess:
Включить отдачу информации для кэширования
ExpiresActive On
#кэшировать изображения один месяц
ExpiresByType image/x-icon "access plus 30 days"
ExpiresByType image/jpeg "access plus 30 days"
ExpiresByType image/png "access plus 30 days"
ExpiresByType image/gif "access plus 30 days"
#кэшировать файлы-иконки один год
ExpiresByType image/ico "access plus 365 days"
#кэшировать css, javascript файлы одну неделю
ExpiresByType text/css "access plus 7 days"
ExpiresByType text/javascript "access plus 7 days"
ExpiresByType application/javascript "access plus 7 days"
ExpiresByType application/x-javascript "access plus 7 days"
Схема настройки кэширования скриптов
У пользователей VPS/VDS и выделенных серверов есть полный контроль над работой своего сервера. Они могут, вместо применения .htaccess, изменять конфигурацию web-сервера соответствующим образом для отдачи нужных HTTP-заголовков. Для этого необходимо зайти в конфигурационный файл web-сервера. В зависимости от версии веб-сервера и дистрибутива, нужный файл может располагаться по пути /usr/local/apache2/conf/httpd.conf или /etc/httpd/conf/httpd.conf.
Для управления кэшированием в браузере используют заголовок Cache-Control. Например, добавление заголовка в указанный файл Cache-Control: private, max-age=60 будет кэшировать результат запроса в браузере на 60 секунд.
Кэширование страниц сайта на сервере
Второй тип кэширования, с которым сталкиваются владельцы сайтов, - это кэширование страниц сайта на сервере.
Простая схема отдачи для пользователя динамических страниц выглядит так:
1. Web-сервер запрашивает информацию из базы данных (или других источников).
2. Затем из этих данных создает HTML-код страницы.
На все это тратятся время и ресурсы сервера. Принцип серверного кэширования подразумевает, что сгенерированный HTML-код сохраняется в файл на диске, и при условии, что данные для создания страницы не изменялись, этот файл будет отдаваться пользователю напрямую при следующем запросе страницы.
Выгода от такого подхода понятна: экономия времени и аппаратных ресурсов сервера.
В случае сложных и больших по объему информации запросов к базе данных, разница по времени отдачи страницы может достигать десятков и сотен раз.
Схема работы серверного кэширования для самописного сайта на PHP
Ускорение Wordpress с помощью кэширования
Практически для всех популярных CMS существуют модули серверного кэширования страниц. Рассмотрим на примере CMS Wordpress, как настраивается такой модуль и режим кэширования.
Дополнительные модули для Wordpress распространяются в виде плагинов. Разработано много различных плагинов Wordpress, обеспечивающих серверное кэширование, например:
- Wordpress Super Cache;
- Wordpress Total Cache;
- и другие.
Один из самых популярных плагинов кэширования - это LiteSpeed Cache.
1. Чтобы его установить, зайдите в панель администрирования Wordpress и найдите раздел “Плагины”.
2. Нажмите на кнопку “Установить”.
3. После установки LiteSpeed Cache он появится в списке плагинов, и нужно будет его активировать в Wordpress.
4. После активации LiteSpeed Cache сразу готов к работе и производит кэширование страниц сайта со стороны сервера.
5. Для тонкой настройки опций кэширования вам станет доступен специальный раздел в административной панели Wordpress.
Этот плагин также поддерживает кэширование страниц сайта в оперативной памяти сервера, что дает еще большую скорость, по сравнению с использованием кэширования на диске.
Для этого на сервере должно быть установлено программное обеспечение Redis или Memcached.
Их установка подходит для пользователей услуги VPS/VDS и выделенных серверов.
Авторы плагина даже разработали свой собственный web-сервер LiteSpeed, в комбинации с которым этот плагин работает наиболее эффективно.
Для серверного кэширования сайтов на Wordpress использование LiteSpeed Cache как автоматически настроенной услуги предлагают многие провайдеры виртуального хостинга в рамках особых тарифных планов “Хостинг Wordpress”.
Кэширование PHP-скриптов
Эта техника кэширования непосредственно касается сайтов, созданных на языке программирования PHP, и используется на VPS/VDS и выделенных серверах.
PHP - это скриптовый язык. При обработке исходного кода страницы движок PHP преобразует его в опкоды (операционные коды), которые затем уже исполняются и выдают результат.
Механизм кэширования этих кодов работает по принципу: если код конкретной страницы не изменялся, то можно использовать уже готовые опкоды для этой страницы и не проводить заново процесс разбора кода и его преобразования.
Для этого используется специальное расширение PHP OPCache, которое занимается оптимизацией и кэшированием опкодов.
Вы как администратор сервера можете самостоятельно настроить свою систему и подключить на сервере расширение OPCache для движка PHP.
Данный метод экономит вычислительные ресурсы сервера и хорошо помогает ускорить работу нагруженных сайтов с высокой посещаемостью.
Кэширование запросов к базе данных
Современные системы управления базами данных, такие как MySQL, поддерживают кэширование запросов прямо “из коробки”.
В случае использования виртуального хостинга эта функция уже настроена провайдером оптимальным образом.
Пользователи VPS/VDS и выделенных серверов могут управлять количеством оперативной памяти, выделяемой под кэширование запросов к базе данных. Для нагруженных сайтов с большим объемом данных в базе и высокой посещаемостью оптимальный размер кэша запросов может достигать нескольких сотен мегабайт.
От панели управления зависит ваше удобство в настройке хостинге\сайта.
Большинство качественных хостингов из нашего ТОПа используют удобные панели управления, поэтому рекомендуем больше внимания уделить другим параметрам при выборе.
Облачный хостинг - распределение нагрузки на несколько серверов, если сервер с вашим сайтом перегружен или не работает. Это гарантия того что пользователи в любом случае смогут видеть ваш сайт. Но это дорогая, более сложная опция, которую предоставляют далеко не все провайдеры.
Виртуальный хостинг - подходит для большинства проектов начального уровня с посещаемостью до 1000 человек в сутки. В таком хостинге мощность сервера делится между несколькими хостинговыми аккаунтами. Услуга проста в настройке даже для новичков.
VPS - подходит для более сложных проектов с достаточно большой нагрузкой и посещаемостью до 10000 человек в сутки. Здесь мощность сервера фиксированная для каждого виртуального сервера, при этом сложность настройки увеличивается.
Выделенный сервер - нужен для очень сложных и ресурсоемких проектов. Для вас выделяют отдельный сервер,мощность которого будете использовать только вы. Дорого и сложно настраивать.
Размещение и обслуживание вашего собственного сервера в дата-центре хостинга - это не очень популярная услуга и требуется в исключительных случаях.
CMS - это система управления контентом сайта. Хостеры стараются для каждой из них делать отдельный тариф или упрощать установку. Но в целом это больше маркетинговые ходы, т.к. у большинства популярных CMS нет специальных требований к хостингу, а те что есть - поддерживаются на большинстве серверов.
Виртуализация - это создание виртуальной среды на физическом сервере, позволяющая запускать требуемые ПО без затрагивания процессов, совершаемых другими пользователями сервера. С её помощью ресурсы физического сервера распределяются между виртуальными (VPS/VDS). Основные виды: аппаратная (KVM), паравиртуализация, виртулизация на уровне ОС (OpenVZ).
Абузоустойчивый хостинг - компании, которые разрешают размещать практически любой контент, даже запрещенный (спам, варез, дорвеи, порнографические материалы). Такие компании не удаляют контент вашего веб-сайта при первой же жалобе (“абузе”).
Безлимитный хостинг - хостинг у которого отсутствуют лимиты на количество сайтов, БД и почтовых ящиков, трафик, дисковое пространство и т.д. Обычно это больше маркетинговый трюк, но можно найти что-то интересное для себя.
Безопасный хостинг - тот, где администрация постоянно обновляет ПО установленное на серверах, устанавливает базовую защиту от DDoS-атак, антивирус и файерволлы, блокирует взломанные сайты и помогает их "лечить".
Защита от DDOS - компании, которые предоставляют хостинг с защитой от DDoS-атак. Такие пакеты ощутимо дороже обычных, но они стоят своих денег, так как ваш сайт будет защищен от всех видов сетевых атак.
Тестовый период - предоставляется хостером бесплатно на 7-30 дней, чтобы вы могли удостовериться в его качестве.
Moneyback - период на протяжении которого хостер обязуется вернуть деньги, если вам не понравится хостинг.
Настоятельно рекомендуем не покупать слишком дешевый хостинг! Как правило с ним очень много проблем: сервер иногда не работает, оборудование старое, поддержка долго отвечает или не может решить проблему, сайт хостера глючит, ошибки в регистрации, оплате и т.д.
Также мы собрали тарифы от тысяч хостеров, чтобы вы могли выбрать хостинг по конкретной цене.
На языке программирования PHP и базах данных MySQL сейчас работает большинство сайтов. Они же поддерживаются практически всеми современными хостингами.
ASP.NET - платформа для разработки веб-приложений от Майкрософт.
ОС - операционная система, установленная на сервере хостинга. Мы рекомендуем размещать на серверах с Linux, если нет особых требований у разработчиков сайта.