Как вы улучшаете производительность Drupal?


Drupal быстро развивается, но производительность очень низкая. Трудно достичь 50 запросов в секунду.

И на простой веб-странице так много SQL-запросов. Если вы проверяете время запроса формы, отправляемой в Drupal.org это всегда займет несколько секунд, чтобы закончить.

Как вы повышаете скорость своего веб-сайта?

Author: kenorb, 2012-03-02

10 answers

Кэширование, кэширование и кэширование.

Некоторые предложения, которые я ранее давал на аналогичный вопрос по d.o.

  1. Размещение лака или другого обратного прокси-сервера перед вашим http-демоном, вероятно, лучшее, что вы можете сделать.
  2. Во время DrupalCon Copehagen Расмус заявил, что использование кэша кода операции php, такого как APC, является одной из лучших вещей, которые вы можете сделать для ускорения PHP в целом. Производительность повышается с более новыми версиями PHP. Обновление PHP также дает дополнительные преимущества при обновлении Drupal. С 6 по 8 в Drupal произойдет серьезный сдвиг в сторону объектной ориентации, что также связано с большинством улучшений производительности в новых версиях PHP.
  3. Memcache является популярным выбором для ускорения кэширования, помещая кэш в память вместо диска.
  4. Панели + Кэширование в сочетании с Действиями кэша может значительно повысить производительность даже для зарегистрированные пользователи, так как он поддерживает довольно сложную логику.
  5. Кэш сущностей является хорошим и нулевым ускорением для всех, кто использует Drupal 7.
  6. Сайты с большим объемом записи имеют меньше "хорошо зарекомендовавших себя" решений. Некоторые варианты включают в себя.
    1. Перемещение частых записей полностью, например статистики, в другое место, например в Google analytics.
    2. Кэширование частых операций записи с помощью пользовательского решения в чем-то вроде NodeJS, которое будет записывать данные в БД раз в X второй.
    3. Пожертвуйте священной КИСЛОТОЙ и используйте базу данных, такую как MongoDB. (См. Комментарий Бердира ниже)
    4. Кластеризуйте свою SQL-базу данных. Выполняйте чтение из одной базы данных, запись в другую. Это является родным для D7, и Pressflow может помочь с этим в D6.
 61
Author: Letharion, 2013-09-16 13:22:29

Это заметки из моего опыта и могут отличаться от того, что испытывают другие. Я в основном использую стек ЛАМП и рассмотрел то же самое в своих предложениях.

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

  1. Обработайте Один Раз, Используйте Несколько Раз.
  2. По возможности работайте с устаревшими данными
  3. Нечасто очищайте кэши и сохраняйте их очень конкретными.
  4. По возможности вносите изменения на самом низком уровне стека. ЛАМПА - DCCc: Linux, Apache, Mysql, PHP, ядро Drupal, Contrib и пользовательский модуль.

Повышение производительности сайта Drupal (в порядке возрастания сложности)

  1. Обновляйте ядро, модуль contrib и темы. Да, это имеет значение.

  2. Установите APC на свой сервер. (Перемещено в начало на основе предложения от Летарион)

  3. Кэширование страниц: администратор/конфигурация/разработка/производительность Разница между минимальным сроком службы кэша и истечением кэшированные страницы

  4. Кэширование блоков https://drupal.org/project/blockcache_alter Параметры кэширования для всех блоков.
  5. Объединение файлов javascript и css - Улучшения интерфейса https://www.drupal.org/project/advagg
  6. Отключите ненужные модули. Каждый модуль увеличивает объем кода , который должен быть доступен для загрузки страницы. И это также увеличивает количество поисковых запросов. Где возможно использовать универсальный модуль вместо нескольких модулей это выполняет определенные функции.
  7. Кэширование представлений содержимого - Кэширование представлений с учетом содержимого https://www.drupal.org/project/views_content_cache
  8. Отключить ведение журнала БД - Использовать https://drupal.org/project/syslog_ng
  9. Уменьшить 404 ошибки - http://www.brokenlinkcheck.com /
  10. Быстрые 404 ответа - https://drupal.org/project/fast_404 - Попробуйте выполнить обработку на уровне сервера.
  11. Проверки на стороне клиента - https://www.drupal.org/project/clientside_validation
  12. Сжатие изображения - https://www.drupal.org/project/imageapi_optimize
  13. Отложенная загрузка изображений - Не загружайте ненужные изображения - https://www.drupal.org/project/lazyloader
  14. Используйте листы спрайтов - https://www.drupal.org/project/spritesheets

  15. Установите значение минимального срока службы кэша на большее число и используйте модули очистки кэша для очистки кэшей для конкретные страницы - Всякий раз, когда я редактирую/обновляю узел, все кэши страниц для анонимного пользователя теряются

  16. Используйте модуль разработки для просмотра запросов.
  17. Перепишите запросы представлений /избегайте представлений, если это перебор.
  18. XHProf - https://www.drupal.org/project/XHProf
  19. FPM, HHVM.
  20. Профилирование и настройка БД - https://www.drupal.org/project/dbtuner
  21. Используйте Boost, не загружайте базу данных, если это не требуется. https://drupal.org/project/boost Для большинства небольших и средних сайтов повышение достаточно хорошо, и вам могут не понадобиться обратные прокси или что-то в этом роде.
  22. Использовать CDNs - https://www.drupal.org/project/cdn Его легко настроить.
  23. Если ваши таблицы кэша огромны, используйте Memcached - Если вы можете установить memcached и настроить для него оперативную память, это не так сложно, как кажется.
  24. Etags - Настройка Etags должным образом. https://developer .yahoo.com/blogs/ydnfiveblog/high-performance-sites-rule-13-configure-etags-7211.html
  25. Используйте Обратный прокси-сервер - Лак (по крайней мере, для активов). Очень помогает, если большинство ваших пользователей анонимны.
  26. Сжатая передача - Включить сжатие gzip
  27. Поддерживайте связь - Используйте постоянные соединения, где это возможно.
  28. Прогрессивные JPEG-файлы -
  29. КЭШИРОВАНИЕ В КОДЕ - блог Итона потрясающий. http://www.lullabot.com/blog/article/beginners-guide-caching-data-drupal-7
  30. Реализовать прогрев кэша - https://www.drupal.org/project/cache_warmer - Кэш Прогревает страницы до того, как на них попадет конечный пользователь.
  31. Конфигурация БД ведущего ведомого устройства - https://www.drupal.org/project/autoslave облегчает вам его настройку.
  32. Кластеры баз данных - https://stackoverflow.com/questions/1163216/database-cluster-and-load-balancing
  33. Балансировщики нагрузки - http://en.wikipedia.org/wiki/Load_balancing_ (вычисления)
  34. Использовать эвристическое прогревание кэша - https://www.drupal.org/project/cache_graceful
  35. Кэширование аутентифицированного пользователя - https://www.drupal.org/project/authcache
 23
Author: Gokul N K, 2017-05-23 11:33:47

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

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

Apache полностью поддерживается, с полу-поддержкой Nginx, Lighttpd и IIS 7. Boost будет кэшировать и gzip сжимать html, xml, ajax, css и javascript. Логика истечения срока действия кэша очень развита; довольно просто иметь разное время жизни кэша для разных частей вашего сайта. Встроенный искатель обеспечивает быстрое восстановление содержимого с истекшим сроком действия для быстрой загрузки страницы.

 17
Author: Beebee, 2020-06-15 09:13:00

Стоит отметить, что если вы используете драйвер базы данных SQLite, вам, возможно, придется отключить синхронизацию дисков.

/**
 * Implements hook_init().
 */
function HOOK_init() {
  db_query('PRAGMA synchronous = OFF');
}

В некоторых конфигурациях серверов это значительно повысит производительность.

 4
Author: ya.teck, 2014-03-30 09:35:14

Секрет производительности Drupal заключается в кэшировании и следовании передовым практикам. Предложения:

Серверная часть Drupal

Интерфейс Drupal

  • Минимизировать HTTP-запросы путем:
    • Включите агрегацию JS/CSS в разделе Производительность .
    • Используйте CSS-спрайты для уменьшения количества запросов изображений.
    • Используйте небольшие изображения в качестве встроенные данные (URI в таблице стилей).
    • Используйте Карты изображений для объединения нескольких изображений в одно изображение.
    • Также рассмотрите возможность использования отложенной загрузки изображений (см.: Загрузчик изображений Lazyloader).
    • Установите Модуль BigPipe , чтобы сократить время загрузки.
    • Рассмотрим отложенную загрузку и отложенную оценку.
    • Смотрите: Использование кэша Браузера - Открыто!
  • Подумайте о том, чтобы сделать некоторые JavaScript и CSS внешними (в некоторых случаях это быстрее).
  • Уменьшите JavaScript и CSS (см.: Быстрыймодуль). Избегайте встроенных.
  • При ссылке на JS используйте атрибуты defer или async.
  • Сведите к минимуму количество кадров iframe.
  • Оптимизируйте изображения, шрифты, CSS-спрайты, сделайте favicon небольшим для кэширования и уменьшите размер файлов cookie.
  • Уменьшите количество элементов DOM и кэшируйте ссылки на доступные элементы.
  • Ускорьте загрузку 404 страниц с помощью Быстрый 404 модуль.
  • Включите агрегацию и кэширование интерфейсных ресурсов с помощью Расширенной агрегации CSS/JS.
  • Поместите таблицы стилей вверху, а сценарии внизу.
  • Добавьте заголовок Истекает срок действия или Управления кэшем, а также ETags, чтобы уменьшить количество ответов.
  • Используйте GET для AJAX и сделайте их кэшируемыми.
  • Предварительная загрузка и последующая загрузка компонентов, чтобы использовать время простоя браузера.
  • Иногда расщепление компоненты в разных доменах могут максимизировать параллельную загрузку.
  • Не масштабируйте изображения в HTML и сохраняйте компоненты размером менее 25 кб.
  • Избегайте фильтров, CSS-выражений, HTML-элементов с пустым src или href.
  • Используйте обратный прокси-сервер для отладки ваших веб-запросов (например, Чарльз).
  • Используйте такие инструменты, как Y-Slow и PhantomJS для базовой проверки производительности.
  • Используйте инструменты Google Скорость страницы для анализа и оптимизации вашего веб-сайта.
  • Читать о Время навигации W3C технические характеристики (GitHub).

PHP

  • Включить кэширование PHP (например, Кэш-память, APC) и настройки настроек.
  • Рассмотрите возможность использования PHP-FPM вместо mod_php плюс Nginx вместо Apache.

База данных

Сервер

Сайты с высоким трафиком

Если вы ожидаете высокой загрузки вашего сайта, используйте лак. Рассмотрите также возможность использования CDN.

Подробнее читайте по адресу: Реальный мировой опыт масштабирования и производительность настройки


Дополнительные ресурсы:

 3
Author: kenorb, 2017-04-13 12:47:02

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

В статье Производительность и масштабируемость в Drupal 7 вы можете найти несколько примеров о Drupal 6 и Drupal 7 и следующий список:

Проекты производительности и масштабируемости Drupal 7 для просмотра:

 2
Author: Adrian Cid Almaguer, 2016-08-09 06:36:09

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

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

Источник: http://www.cloudreviews.com/blog/drupal-performance-optimization-tips

 1
Author: Sabih, 2013-05-30 10:31:44

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

  1. Вы можете настроить это, перейдя по адресу: Ваш домен/администратор/конфигурация/разработка/производительность
  2. Включить "Кэширование страниц для анонимных пользователей" в разделе Кэширование
  3. Минимальный срок службы кэша: 1 день (если вы не выполняете регулярные обновления)
  4. Срок действия кэшированных страниц: 1 день (если вы не выполняете регулярные обновления)
  5. Включить "Сжатие кэшированных страниц"
  6. Включить "Агрегировать и сжимать CSS-файлы"
  7. Включить "Агрегировать файлы JavaScript'

  8. Как только эти настройки будут установлены, перейдите по ссылке: Ваш домен/администратор/отчеты/статус

  9. Проверьте, есть ли какие-либо проблемы с разрешениями для каталогов "css" и "js"
  10. Исправьте разрешение, как определено на странице отчета о состоянии

И теперь вы закончили с оптимизацией скорости для вашего drupal 7 сайт.

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

Pingdom и HTTP Fox (плагин Firefox) - лучшие инструменты для проверки скорости сайта.

Вышеуказанные настройки не только кэшируют ваши страницы для анонимных пользователей, но и сжимают CSS и файлы JS. Пример если ваш сайт загружает 80 файлов, опубликуйте эти настройки, количество запросов сократится как минимум на 50%, так что здесь у вас есть 2-кратное повышение скорости на вашем сайте Drupal.

 1
Author: AnAnD, 2013-12-11 11:23:37

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

1) Очистите свою таблицу сторожевого пса

2) Не злоупотребляйте переменным API

3) Делайте меньше или лучше HTTP-запросов

4) Держите свой "точечный модуль" коротким

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

Источник: Оптимизируйте, прежде чем выходить в эфир

 1
Author: targoo, 2014-07-07 15:13:15

Неоптимизированный сайт Drupal 7 с 2 ГБ оперативной памяти может удовлетворительно обслуживать около 20-25 запросов в секунду. Если вы хотите пойти дальше этого, сайт потребует некоторой настройки. То, что вы настраиваете, зависит от того, являются ли большинство пользователей на сайте анонимными или аутентифицированными. Вот основные вещи, которые вы можете сделать для повышения производительности:

Сайт обслуживает в основном анонимных пользователей:

1) Обязательно установите и настройте APC, memcache и entitycache.

2) Поместите прокси-сервер перед веб-сервером. Установка и настройка занимает около 30 минут, но значительно сократит время загрузки вашей страницы. Фактически, Varnish может обрабатывать около 300 запросов в секунду на компьютере объемом 2 ГБ, если все страницы кэшированы. Используйте модуль истечения срока действия, чтобы истекал срок действия только выбранных страниц при обновлении/удалении содержимого.

3) Используйте расширенный модуль агрегации CSS/JS для агрегирования файлов CSS и JS. Попробуйте переместить все файлы JS в нижнюю часть страницы. Но учтите, что это может сломаться ваш сайт поэтому внедрит это в производство после тщательного тестирования. Также поэкспериментируйте с встраиванием критического CSS. По моему опыту, это сократит время загрузки страницы примерно на полсекунды.

4) CSS/JS/изображения должны иметь заголовок истечения срока действия в далеком будущем. Это гарантирует, что браузеры не будут запрашивать одни и те же CSS/JS/изображения снова и снова.

5) Убедитесь, что веб-сервер обслуживает сжатые страницы/CSS/JS.

После выполнения вышеуказанных 5 шагов ваш сервер оперативной памяти объемом 2 ГБ должен иметь возможность для сервера 50 запросов в секунду довольно легко.

Сайт обслуживает в основном аутентифицированных пользователей:

Оптимизация такого сайта является более сложной задачей. Такие сайты попадают в одну из двух подкатегорий для целей оптимизации:

(a) Большинство страниц на сайте идентичны, за исключением 1 или 2 блоков, содержащих информацию, относящуюся к конкретному пользователю. Например, для коммерческого сайта Drupal.

(b) Большинство страниц полностью настроены для пользователя. Например, для общего доступа Drupal сайт.

Если ваш сайт относится к категории (а), примените большинство методов, которые мы обсуждали, для сайта, обслуживающего в основном анонимных пользователей. Единственное отличие состоит в том, что для страниц, не являющихся администраторами, Varnish нужно будет удалить файл cookie СЕАНСА из заголовка и обслуживать кэшированные страницы. Используйте модуль блоков AJAX для серверных блоков с пользовательской информацией с помощью AJAX. Таким образом, большая часть страницы будет очень быстро обработана с помощью лака, а затем будет передана информация о пользователе АЯКС.

Если ваш сайт относится к категории (b), используйте модуль Authcache. Я предпочитаю не использовать его как можно чаще, потому что он требует довольно большой настройки и обслуживания. Но это действительно работает очень хорошо. Это будет не так быстро, как при использовании Varnish, но он сможет обрабатывать 50 запросов в секунду, которые вы ищете.

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

 1
Author: Neerav Mehta, 2015-07-05 16:31:05