Повышение производительности Drupal 9 с помощью модулей, лучших практик программирования и правильной конфигурации сервера
Опубликовано: 2020-08-11У вас может быть самый мощный сервер с кучей памяти, но достаточно ли этого для обеспечения высокопроизводительного веб-сайта? С Drupal легко масштабировать веб-сайт в соответствии с ростом вашего бизнеса. Фактически, это то, в чем хорош Друпал. Однако внезапный рост количества веб-страниц, функциональности и контента может повлиять на его производительность. Drupal 9 уже здесь и готов к решению этой задачи как профессионал! Он обладает достоинствами Drupal 8 за исключением старого кода, который делает его компактнее, чище и мощнее. Узнайте больше о методах повышения производительности Drupal 9, которые действительно работают.
Эффективность веб-сайта - залог успеха в бизнесе. Медленная загрузка веб-сайтов может быть вредна для бизнеса. Веб-сайт с более высокой производительностью помогает улучшить SEO, повысить коэффициент конверсии посетителей и обеспечить лучший пользовательский интерфейс для посетителей, что в совокупности способствует росту бизнеса. В то время как медленная загрузка веб-сайтов делает прямо противоположное и становится причиной банкротства бизнеса.

Есть много вещей, которые влияют на производительность сайта. Некоторые из них:
• Ваш поставщик услуг (хостинг, DNS и т. Д.)
• Количество запросов к серверу
• Технические проблемы или неправильные методы программирования.
• Техника кеширования
• Неправильная конфигурация сервера.
• Тяжелые изображения и видеофайлы
Drupal 9 Core и пользовательские модули для повышения производительности
В Drupal 9 есть много доступных дополнительных и основных модулей, которые могут быть полезны для повышения производительности вашего сайта. Следуя определенным методам кодирования и правильно настроив сервер, вы можете значительно улучшить производительность сайта.
Основные модули
• Большая труба
Модуль Drupal Big Pipe ускоряет работу без дополнительной настройки. Он поставляется в комплекте с ядром Drupal. Он улучшает воспринимаемую производительность внешнего интерфейса за счет использования метаданных кэшируемости и, таким образом, улучшения конвейера рендеринга.
• Внутренний динамический кэш страниц
Этот модуль Drupal 9 помогает кэшировать динамический контент. Это полезно как для анонимных, так и для аутентифицированных пользователей. Этот модуль недоступен в Drupal 7. Страницы, запрошенные пользователями, сохраняются при первом запросе и затем могут быть повторно использованы при следующем запросе той же страницы.
• Внутренний кеш страницы
Модуль Internal Page Cache помогает кэшировать данные для анонимных пользователей. Этот модуль доступен в ядре и по умолчанию включен.
Путь конфигурации: admin / config / development / performance
Здесь вы можете очистить кеш, установить максимальный возраст кеша браузера и прокси, а также включить / отключить настройки агрегирования.

Добавленные модули
- Продвинутая агрегация CSS / JS
Модуль Advagg поставляется со многими другими субмодулями, такими как - - AdvAgg Cdn: помогает загружать ресурсы (CSS / JS) из общедоступного CDN
- AdvAgg CSS / JS Validator: проверяет файлы CSS и JS
- Внешний минификатор AdvAgg: минимизирует Javascript и / или CSS с помощью минификатора командной строки.
- AdvAgg Minify CSS: помогает минимизировать файлы css с помощью стороннего минификатора.
- AdvAgg Minify JS: помогает минимизировать файлы js с помощью сторонних mi
- Модификатор AdvAgg: позволяет изменять массив CSS и JS. (Может возникнуть проблема с совместимостью)
- AdvAgg Old Internet Explorer Compatibility Enhancer
Путь конфигурации: / admin / config / development / performance / advagg
Этот модуль также поддерживает такие методы сжатия файлов, как gzip и brotli . Этот модуль помогает уменьшить количество HTTP-запросов, тем самым значительно улучшая производительность сайта.
Blazy
Модуль Drupal 9 Blazy обеспечивает отложенную загрузку изображений для экономии трафика и предотвращения более высоких показателей отказов. Ленивая загрузка - это метод, при котором изображения загружаются только тогда, когда они находятся в видимой для пользователя области. Этот метод множественной подачи экономит время и данные.
Путь конфигурации: / admin / config / media / blazy
Здесь вы можете включить / выключить Blazy, настроить эффект заполнителя, а также установить смещение, которое определяет, как рано изображение будет видно пользователю.

Модуль Blazy
CDN
Модуль CDN Drupal 9 помогает легко интегрировать CDN в веб-сайты Drupal. Это помогает обслуживать статический контент с сервера CDN, чтобы увеличить скорость доставки контента. Кроме того, этот модуль также легко настроить.
Путь конфигурации: / admin / config / services / cdn

Здесь вы можете включить / отключить CDN, указать URL-адрес сопоставления и установить / отключить кеширование файлов навсегда.

Повышение производительности с помощью передовых методов программирования
Использование isset () вместо array_key_exist ()
isset () значительно быстрее, чем array_key_exist () . Основное различие между isset и array_key_exist заключается в том, что array_key_exists обязательно сообщит вам, существует ли ключ в массиве. В то время как isset вернет истину только в том случае, если ключ / переменная существует и не имеет значения NULL. Для получения дополнительной информации об этой проверке здесь для сравнительного анализа.
Использование entityQuery ()
entityQuery () зависит от контроллера хранилища для обработки создания и выполнения запроса для соответствующего хранилища сущностей. Это имеет то преимущество, что любой запрос, выполняемый через entityQuery (), не зависит от хранилища. Итак, если вы пишете дополнительный модуль или работаете на веб-сайте, где в будущем может потребоваться перейти на альтернативное хранилище сущностей, все ваши запросы будут прозрачно использовать новый серверный модуль хранилища без каких-либо изменений. entityQuery () можно использовать независимо от того, пишете ли вы запросы вручную в настраиваемом коде или через бэкэнд представлений entityQuery () .
Использование метода loadMultiple () вместо цикла
Если у вас есть 10 nid (идентификаторов узлов) и вы просматриваете их в цикле для загрузки каждого узла, вы делаете 10 запросов к базе данных. При использовании loadMultiple () он сводится к одному запросу к базе данных.
Кеширование
Используя Cache API в Drupal 9, вы можете кэшировать рендерер, массив ответов или объект. В Drupal 9 доступны три метаданных кэширования отрисовки.
- Теги кеширования
Теги кеширования используются для кэширования данных, когда они зависят от сущностей или конфигураций Drupal. Синтаксис для этого элемента кеша: идентификатор например, узел: 5, пользователь: 3. - Контекст кеширования
Синтаксис:
• месячные отделяют родителей от детей
• контекст кэша с множественным именем указывает, что параметр может быть указан; использовать: добавить двоеточие
Пример: user.roles, user.roles: anonymous и т. Д. - Максимальный возраст кеша
Максимальный возраст кэша используется для кэширования данных, чувствительных ко времени.
Работник очереди / Пакет
Для обработки больших объемов данных без тайм-аута php можно использовать пакетную обработку или обработчик очереди. Элементы в очереди worker запускаются только при запуске cron и работают в течение небольшого промежутка времени. Очереди бывают двух типов: надежные и ненадежные. Надежный работник очереди гарантирует, что элемент в очереди будет запущен хотя бы один раз, тогда как ненадежная очередь может пропустить элементы из-за сбоя памяти или другого прерывания. Пакетная обработка обрабатывает элементы до тех пор, пока все элементы в пакете не закончатся, так что во время обработки не должно возникать ошибок, не дожидаясь запуска cron.
Повышение производительности за счет лучшей конфигурации сервера
Использование Nginx вместо Apache
Nginx и Apache - широко используемые веб-серверы. Nginx имеет преимущество перед Apache в тестах производительности. Он также быстрее и эффективнее, чем apache. Согласно тесту производительности до 1000 одновременных подключений, Nginx работает в 2,5 раза быстрее, чем Apache.
HTTP / 2.0 через HTTP / 1.1
HTTP / 2.0 поддерживает мультиплексирование, в отличие от HTTP / 1.1, который блокирует другие ресурсы. Если один ресурс не может быть загружен, HTTP / 2.0 использует TCP-соединение для одновременной отправки нескольких потоков данных. HTTP / 2.0 использует расширенные методы сжатия заголовков, чем HTTP / 1.1.
Конфигурация Nginx для HTTP / 2.0
server {
прослушать 443 ssl http2; // настройки http2
ssl_certificate server.crt;
ssl_certificate_key server.key;
}Обслуживание сжатого содержимого
Сжатие ответов часто значительно уменьшает размер передаваемых данных. Однако, поскольку сжатие происходит во время выполнения, оно также может привести к значительным накладным расходам на обработку, что может отрицательно повлиять на производительность.
Конфигурация Nginx для обслуживания сжатого контента:
server {
gzip дальше;
gzip_static on;
gzip_types текст / простой текст / приложение css / приложение json / текст x-javascript / приложение xml / приложение xml / xml + текст rss / javascript;
gzip_proxied любой;
gzip_vary on;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
...
}MariaDB вместо MySQL
mariaDB имеет улучшенную скорость по сравнению с MySQL. Он обеспечивает более быстрое кеширование и индексирование, чем MySQL. В этом случае это почти на 24% быстрее, чем MySql. Есть и другие ключевые показатели, по которым mariaDB лучше MySQL. Таким образом, MariaDb предпочтительнее MySQL с точки зрения производительности.
CDN
CDN расшифровывается как сеть доставки контента. Это кластер серверов, разбросанных по всему миру (также называемых точками присутствия или PoP), которые работают вместе, чтобы быстрее доставлять контент. CDN хранит кешированную версию контента сайта и доставляет контент с ближайшего доступного сервера. Некоторые из популярных провайдеров CDN - Cloudflare, Amazon cloudfront, Google Cloud cdn и т. Д.
