Асинхронные врезки и кэширование средствами веб-сервера (nginx)

При обсуждении высокой производительности веб-приложений на ум невольно приходят такие названия, как nginx, memcached, eaccelerator, hiphop и им подобные. Фактически это стандартный набор для любого высоконагруженного сайта, написанного с использованием PHP. Но что если мы хотим выжать все соки из сайта на Django?

Вступление

Nginx хорошо себя показывает, когда выполняет запросы к веб-страницам, однако несмотря на это, сервис Google's PageSpeed Insights tool обычно не очень хорошо оценивает сайты, которые работают на серверах со стандартными настройками Nginx. А ведь именно скорость вашего сайта является одним из ключевых моментов при ранжировании в поисковой выдаче.

Поэтому это руководство посвящено тому, как при помощи небольших изменений в настройках увеличить скорость отклика сайта и, соответственно, поднять PageSpeed metric. Цель – получить больше 80/100 баллов, так как это порог, после которого Google ставит зеленый маркер вашему сайту, считая его быстрым.Первое, с чего следует начинать, — это с включения Gzip-сжатия некоторых видов файлов. Затем нужно будет настроить браузерное кэширование. Оба этих действия увеличат скорость любого сайта, запущенного на Nginx, вне зависимости от ПО или используемой CMS. Это работает даже в случае, даже если ваш сайт находится на VDS – главное, чтобы сервер работал на Nginx, и вы могли редактировать конфигурационный файл.

Этапы внедрения кэширования средствами веб-сервера

1. Идентификация фрагментов страниц, которые могут отличаться для разных посетителей сайта, и их замена на асинхронные врезки с отложенной загрузкой.

Макет дизайна готовых интернет-магазинов, доступных для установки через панель управления Netcat, имеет настройку «Загружать динамическую часть макета отдельным запросом» (вкладка «Оформление» в настройках сайта, блок «Настройки макета дизайна»), при включении которой динамические блоки макета будут загружаться после загрузки основной части страницы.

Читайте также:  Кэшбэк в 2019 году: что это, как работает, виды, плюсы и минусы

2. Определение списка страниц, которые никогда не должны кэшироваться веб-сервером (страница оформления заказа, личный кабинет и т. п.).

3. Конфигурирование веб-сервера.

4. …

5. Profit!

Настройка Zend OPcache

В сети много статей в которых описывается оптимальная настройка Zend OPcache. Почитав их, я решил объединить их в своей статье и найти золотую середину. На моем сервере установлен php 7.3 + nginx. И так, открываем файл конфигурации php. :

sudo nano /etc/php/7.3/fpm/

Находим следующие строки и выставляем значения как у меня (хотя можете поэкспериментировать)

_cli=1 _consumption=128 _strings_buffer=8 _accelerated_files=7963 _freq=2 _shutdown=1

  • — включаем наш Zend OPcache.
  • _cli — включает OPcache в CLI-версии PHP.
  • _consumption — задает использование памяти для расширения (если ОЗУ позволяет, то можно увеличить значение).
  • _strings_buffer — задает объем памяти для хранения интернированных строк, в мегабайтах.
  • _accelerated_files – максимальное количество скриптов в памяти (тут тоже можно увеличить, если памяти хватает).
  • _freq — это валидация кэша в секундах, в интернете все рекомендуют значение 60, я же использую 2, но иногда рекомендуют ставить 0 (ноль), то есть постоянно проверять на изменения. К примеру в Joomla OPcache кэширует все файлы и будет отдавать кэш после сохранения файлов еще то время, которое в этой строке. То есть вы сохранили файл, но все равно в течении указанного времени будете видеть старую копию из кеша. Поэтому не жалуйтесь, что файлы не сохраняются, подождите выставленное вами время.
  • _shutdown — определяет включено или выключено быстрое завершение последовательности ускоренного, кода, дает возможность использовать Zend Engine Memory Management

Настройка http2

Я не буду подробно описывать настройку секции server, потому что делал это уже в статье установка Nginx в Ubuntu и здесь мне нечего добавить, настройка SSL это достаточно обширная тема и тоже будет рассмотрена в отдельной статье. Но чтобы настроить http2 вам нужно иметь уже SSL. Далее, просто подправьте директиву listen в вашей секции server:

Читайте также:  Apple выпустила iOS 14.5 beta 1. Что нового и как скачать

listen :443 default_server;

На:

Настройка http2

listen :443 http2 default_server;

Вот таким простым способом можно включить http2 если перед этим была установлена правильная версия Nginx.

Memcached для кэширования объектов

Memcached является одним из самых быстрых и популярных средств для кэширования произвольных данных в оперативной памяти.

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

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

Стандартное кеширование объектов в WordPress

В WordPress есть свое кеширование объектов и оно происходит по тому же принципу, что и в Memcached — произвольные значения или объекты хранятся в памяти под определенным ключом. Но кеш WordPress является непостоянным, то есть все закэшированные значения сбрасываются при следующем посещении страницы сайта.

Сервер Memcached помогает решить эту проблему и сделать объектный кэш постоянным. Это значит, что такие данные как опции сайта WordPress, пользователи, термины, записи, мета-данные и прочее, можно сразу получать из хранилища Memcached в обход базы данных MySQL.

По сути мы кешируем базу данных MySQL, получая необходимые данные значительно быстрее.

Который лучший?

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

Связанные статьи:

  • 10 лучших инструментов кэширования с открытым исходным кодом для Linux (100%)
  • Установка и настройка Varnish: ч. 1: как установить Varnish в Debian и Ubuntu (68.5%)
  • Установка и настройка Varnish: ч. 2: как настроить Varnish, примеры правил (68.5%)
  • Ошибка phpMyAdmin «Существует несоответствие между HTTPS, указанным на сервере и клиенте» (РЕШЕНО) (64.7%)
  • Виртуальный хостинг с Memcached и WP-FFPC (60.1%)
  • Решение проблемы с ошибкой #1698 — Access denied for user ‘root’@’localhost’ (RANDOM — 50%)
Читайте также:  Тонкая настройка Ubuntu. Часть 2 (Защита от сетевых атак)

Сжатие ресурсов сайта

Тут следует остановиться на 2х моментах:

  • Сжатие средствами Битрикс,

  • Сжатие на стороне сервера.

Битрикс своими силами может сжимать и склеивать файлы скриптов и стилей. Включается это в настройках главного модуля по адресу:

Настройки – Настройки продукта – Настройки модулей

Мы сразу попадаем в настройки главного модуля, где нас интересуют следующие чек боксы.

Объединять файлы CSS и JS надо в любом случае, это серьезно ускоряет загрузку файлов, т.к. позволяет вместо 20 подключений задействовать всего 1 или 2. Стоит отметить, что будут объединены файлы, которые подключены средствами Битрикс через методы SetAdditionalCSS и AddHeadScript, или их D7 аналоги. Файлы, подключенные напрямую через теги link или script в объединении не участвуют.

С переносом JS в конец страницы нужно быть аккуратным, особенно если проект достался вам на поддержку в наследство. Может случится ситуация, когда у вас инлайном прописана функция, которая использует подключаемые файлы. Это может быть обращение к методу JQuery. После переноса файлов в конец страницы следует внимательно пройтись по всему проекту и проверить его на предмет ошибок javascript в консоли.

На стороне сервера должна быть настроена работа модуля GZIP. Данная служба необходима для сжатия передаваемых данных. В виртуальной машине Битрикс модуль включен по умолчанию, в популярных панелях хостинга настраивается на странице редактирования домена. Если не найдете, напишите в поддержку хостинга, думаю не откажут.

Есть много сервисов проверки на то, включено ли у вас GZIP сжатие. В тесте мы воспользовались вот этим:

-compression/

Видно, что данный метод позволяет экономить порядка 75% трафика, что особенно актуально для мобильных устройств.