Drupal performance

Написать эту статью меня побудила куча универсальных советов по оптимизации производительности Drupal сайтов.

Предлагаю Вам вместе со мной разобраться в том, что правда, а что вымысел в этом сложном вопросе.

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

Drupal - это система, котороя состоит из нескольких частей и каждая из них может пагубно влиять на производительность сайта (можно читать как скорость загрузки сайта, однако это не тоже самое). Чаще всего проблема с производительностью проявляется как медленная загрузка сайта, но есть и обратная сторона - это нагрузка на сервер. В общем в этом мире всё взаимосвязанно и Drupal не исключение. Т.к. Drupal это система, то и подход в оптимизации производительности должен быть системный. Т.е. нельзя оптимизировать только Drupal или только Nginx, я считаю что нужно оптимизировать систему.

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

Упрощённо вся схема выглядит так:

  1. Пользователь пытается открыть страницу. Запрос от браузера сервера идёт к Веб-серверу.
  2. Веб-сервер разбирает запрос и согласно своим правилам либо отвечает на запрос, либо отправляет его на обработку в Drupal.
  3. Drupal получает запрос от Веб-сервера и начинает свою работу.
  4. Дальше происходит процесс чтения и записи в базу данных.
  5. Drupal обрабатывает полученные данные из БД и пересылает их Веб-верверу.
  6. Веб-сервер отправляет данные пользователю.
  7. Браузер пользователя отображает полученную информацию.

Каждый из этих шагов можно оптимизировать и каждый из них можно расписать намного подробнее :) Некоторые из них специфичны для Drupal: 3, 4 и 5 остальные 1, 2 и 6 применимы почти ко всем веб-приложениям. 7-ой вообще зависит как от ОС и браузера пользователя, так и применяемых Вами CMS, стилей CSS и кода JavaScript.

Мой 7+ летний опыт работы с Drupal говорит о том, что чаще всего встречаются проблемы на стадиях 3, 4, 5, 6, 7.

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