Полностраничное кэширование — потребность в скорости

Опубликовано: 2020-10-02
speed - Full-Page Caching - The Need For Speed -

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

Магазин автозапчастей Джо — статический веб-сайт

1 - Full-Page Caching - The Need For Speed -

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

  1. Покупатель вручает Джо список автомобильных запчастей.
  2. Джо приносит первую часть и кладет ее на прилавок.
  3. Джо приносит вторую часть и кладет ее на прилавок.
  4. И так до конца списка.
  5. Клиент платит и уходит.

Итак, как это применимо к статическому веб-сайту?

Статический веб-сайт — это тот, который не использует базы данных, PHP-скрипты или какие-либо другие программы. Подумайте о простом веб-сайте, который состоит только из HTML-страниц и изображений. Джо и его склад представляют собой части этого простого веб-сайта следующим образом:

  • Склад — это физический сервер.
  • Джо — это программное обеспечение веб-сервера, например Apache.
  • Автозапчасти — это файлы, из которых состоит веб-сайт, например, изображения и HTML-файлы.

Процедура обслуживания этого простого сайта такова:

  1. Браузер запрашивает веб-страницу у Apache, работающего на сервере.
  2. Apache читает первый файл с диска и отправляет его в браузер.
  3. Apache читает второй файл с диска и отправляет его в браузер.
  4. И так до тех пор, пока все не наберется.
  5. Браузер отображает готовую веб-страницу.

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

Джо становится занятым — кэширование спасает положение

2 - Full-Page Caching - The Need For Speed -

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

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

Джо понимает, что 90 % деталей, которые он покупает для клиентов, являются одними из 10. Поэтому он решает хранить эти 10 деталей под прилавком, где он может сразу взять их, когда кто-нибудь их попросит. Теперь он может обслуживать большинство запросов клиентов прямо с прилавка, не заходя на склад. Это намного быстрее.

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

Этот тип кэширования отлично подходит для изображений и других статических файлов, но WordPress — это динамический веб-сайт с PHP-скриптами и базой данных.

Введите полностраничное кэширование.

Жизнь Джо усложняется — PHP, базы данных и кэширование

joe - Full-Page Caching - The Need For Speed -

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

Но это снова замедляет Джо.

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

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

Теперь ему не нужно использовать каталог для большинства заказов Toyota, он может заглянуть в шпаргалку и почти мгновенно преобразовать номер детали Toyota в деталь, которую он может получить.

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

Вот как WordPress создает страницу вашего сайта:

  1. Браузер запрашивает веб-страницу из WordPress.
  2. PHP-скрипт принимает запрос и запрашивает базу данных о том, что ему нужно для создания страницы.
  3. База данных ищет и возвращает всю информацию процессу PHP.
  4. Сценарий PHP создает страницу с этой информацией и отправляет ее в браузер.

Это большая работа, и именно поэтому некэшированные сайты WordPress требуют во много раз больше ресурсов компьютера, чем статические сайты.

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

Это приводит к большому количеству дублированной работы.

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

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

Кэширование и полностраничное кэширование — это превосходные технологии, которые используют ресурсы вашего веб-сервера, чтобы максимизировать эффективность вашего веб-сервера и предоставить вам быстрый сайт WordPress.