Что такое кэширование

Редактор: Дмитрий Сокол 8520 14 мин Аудио

Кэширование - это “складирование” информации в хранилище быстрого доступа (кэш) для ускорения работы 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, обеспечивающих серверное кэширование, например:

Один из самых популярных плагинов кэширования - это 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 и выделенных серверов могут управлять количеством оперативной памяти, выделяемой под кэширование запросов к базе данных. Для нагруженных сайтов с большим объемом данных в базе и высокой посещаемостью оптимальный размер кэша запросов может достигать нескольких сотен мегабайт.

Дмитрий Сокол
Не нашли ответ на свой вопрос?
Задайте его экспертам! Ответ приходит очень быстро и прямо на ваш email.

Добавляя подтверждение "Я не робот" вы так же даете согласие получать сообщения от ru.hostings.info и принимаете его Политику конфиденциальности, позволяя ru.hostings.info хранить и обрабатывать вашу личную информацию, указанную выше, для предоставления вам запрашиваемого контента.

Рейтинги хостинг-провайдеров по задачам сайта
Апреля
Панель управления

От панели управления зависит ваше удобство в настройке хостинге\сайта.

Большинство качественных хостингов из нашего ТОПа используют удобные панели управления, поэтому рекомендуем больше внимания уделить другим параметрам при выборе.

Вид хостинга

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

Виртуальный хостинг - подходит для большинства проектов начального уровня с посещаемостью до 1000 человек в сутки. В таком хостинге мощность сервера делится между несколькими хостинговыми аккаунтами. Услуга проста в настройке даже для новичков.

VPS - подходит для более сложных проектов с достаточно большой нагрузкой и посещаемостью до 10000 человек в сутки. Здесь мощность сервера фиксированная для каждого виртуального сервера, при этом сложность настройки увеличивается.

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

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

CMS

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

Тип виртуализации

Виртуализация - это создание виртуальной среды на физическом сервере, позволяющая запускать требуемые ПО без затрагивания процессов, совершаемых другими пользователями сервера.  С её помощью ресурсы физического сервера распределяются между виртуальными (VPS/VDS). Основные виды: аппаратная (KVM), паравиртуализация, виртулизация на уровне ОС (OpenVZ).

Прочее

Абузоустойчивый хостинг - компании, которые разрешают размещать практически любой контент, даже запрещенный (спам, варез, дорвеи, порнографические материалы). Такие компании не удаляют контент вашего веб-сайта при первой же жалобе (“абузе”).

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

Безопасный хостинг - тот, где администрация постоянно обновляет ПО установленное на серверах, устанавливает базовую защиту от DDoS-атак, антивирус и файерволлы, блокирует взломанные сайты и помогает их "лечить".

Защита от DDOS - компании, которые предоставляют хостинг с защитой от DDoS-атак. Такие пакеты ощутимо дороже обычных, но они стоят своих денег, так как ваш сайт будет защищен от всех видов сетевых атак.

Бесплатный тест

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

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

Региональные
Цена

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

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

Технологии и ОС

На языке программирования PHP и базах данных MySQL сейчас работает большинство сайтов. Они же поддерживаются практически всеми современными хостингами.

ASP.NET - платформа для разработки веб-приложений от Майкрософт.

ОС - операционная система, установленная на сервере хостинга. Мы рекомендуем размещать на серверах с Linux, если нет особых требований у разработчиков сайта.

Тип диска