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


54

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

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

Как вы улучшаете скорость вашего сайта?


3
Вы действительно искали сайт? Я не могу себе представить, что это не обсуждалось ранее.
Летарион

1
Оформить заказ мои слайды goo.gl/30yi39 должен помочь вам
mikeytown2

Ответы:


61

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

Некоторые предложения, которые я ранее дал аналогичному вопросу о

  1. Размещение Varnish или другого обратного прокси-сервера перед вашим http-демоном - это, вероятно, единственное лучшее, что вы можете сделать.
  2. Во время DrupalCon Copehagen Расмус заявил, что использование кэша кода php, такого как APC , является одним из лучших способов ускорения работы PHP в целом. Производительность улучшается с новыми версиями PHP. Есть также дополнительные преимущества для обновления PHP при обновлении Drupal. С 6 по 8 Drupal претерпит серьезный сдвиг в сторону объектной ориентации, что также является причиной большинства улучшений производительности в новых версиях PHP.
  3. Memcache является популярным выбором для ускорения кеширования, помещая кеш в память вместо диска.
  4. Панели + Кэширование в сочетании с действиями Cache могут значительно повысить производительность даже для зарегистрированных пользователей, так как он поддерживает довольно сложную логику.
  5. Entity Cache хорошая и нулевого конф повышение скорости для любого использования Drupal 7.
  6. На сайтах с интенсивной записью меньше «устоявшихся» решений. Некоторые варианты включают.
    1. Перемещение частых записей полностью, например, статистика, где-то еще, например, Google Analytics.
    2. Кэширование частых операций записи с помощью специального решения в нечто вроде NodeJS, которое будет записывать в БД раз в X-ю секунду.
    3. Пожертвуйте священную КИСЛОТУ и используйте базу данных, такую ​​как MongoDB . (См. Комментарий Бердира ниже)
    4. Кластеризация вашей базы данных SQL. Читает из одной базы данных, пишет в другую. Это встроено в D7, и Pressflow может помочь с этим в D6.

Все это было добавлено, но все это для кэширования чтения, не хорошо для сайтов, у которых много записи.
Брюс Доу

Вы не сказали ничего конкретного о письмах. :) Я добавлю кое-что об этом в моем ответе.
Летарион

1
Разъяснение по MongoDB. Вы не можете переключить свою полную базу данных на MongoDB. MongoDB является чем-то совершенно отличным от СУБД, такой как MySQL, и, например, не использует SQL. Вы можете заменить только некоторые подключаемые компоненты и использовать их для хранения части ваших данных в MongoDB, например, полей, журналов, блоков и так далее.
Бердир

@Letharion >> Скопируйте свою базу данных SQL. Читает из одной базы данных, пишет в другую. Pressflow может помочь с этим. Как этого достичь?
GoodSp33d

1
Отличный ответ! Definitive. Чтобы добавить к этому, взгляните на модуль Advanced CSS / JS Aggregation, так как я понимаю, что агрегация уменьшает запросы на отдельные файлы CSS и JS, тем самым помогая повысить производительность.
therobyouknow

23

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

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

  1. Обработайте один раз несколько раз.
  2. Жить с устаревшими данными, когда это возможно
  3. Очистите кеширование нечасто и сохраняйте его очень конкретным.
  4. По возможности делайте изменения на самом низком уровне в стеке. LAMP - DCCc: Linux, Apache, Mysql, PHP, Drupal Core, Contrib и пользовательский модуль.

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

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

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

  3. Кэширование страниц: admin / config / development / performance Разница между минимальным временем жизни кэша и истечением срока хранения кэшированных страниц.

  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. Используйте Sprite Sheets - https://www.drupal.org/project/spritesheets

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

  16. Используйте модуль Devel для просмотра запросов.
  17. Переписать представления запросов / избежать просмотров, если это излишнее.
  18. XHProf - https://www.drupal.org/project/XHProf
  19. FPM, HHVM.
  20. Профилирование и настройка БД - https://www.drupal.org/project/dbtuner
  21. Используйте Boost , а не Bootstrap DB, если не требуется. https://drupal.org/project/boost Для большинства малых и средних сайтов Boost достаточно хорош, и вам могут не понадобиться обратные прокси или около того.
  22. Используйте CDN - 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. Keep Alive - Используйте постоянные соединения, где это возможно.
  28. Прогрессивные JPEGS -
  29. Кэширование в коде - блог Итона потрясающий. http://www.lullabot.com/blog/article/beginners-guide-caching-data-drupal-7
  30. Реализация прогрева кэша - https://www.drupal.org/project/cache_warmer - кэширование Прогрев страниц до того, как конечный пользователь их ударит.
  31. Конфигурация Master Slave DB - 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_(computing)
  34. Использовать эвристический прогрев кэша - https://www.drupal.org/project/cache_graceful
  35. Кэширование аутентифицированных пользователей - https://www.drupal.org/project/authcache

Повторно разместив ответ, который я написал для drupal.stackexchange.com/questions/118990/… . Кстати, это было закрыто, говоря, что это было слишком широко. Я не уверен, есть ли большая разница в этих двух вопросах :)
Гокул Н.К.

18

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

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

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


1
Boost прекрасно работает для Drupal 7, теперь imao. Для решения с общим хостингом это отличный способ (так как они часто не позволяют, например, Varnish).
Мудрец

5

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

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

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


2
Так как это отключало его при каждой загрузке страницы, я подумал, есть ли лучший способ отключить его навсегда. Следует потратить некоторое время на проверку.
Гокул НК,

1
Это можно сделать в sites / default / settings.php, добавив элемент 'init_commands' в массив $ database. Я нашел пример для «PRAGMA синхронный = OFF» здесь: bitacoles.enging.com/node/210
dinopmi

4

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

Drupal Back-End

  • Включите кэширование в разделе « Производительность ».
  • Проверьте модули контрольного списка производительности и производительности и масштабируемости .
  • Проверьте параметры оптимизации Drupal 7 и контрольный список .
  • Отключите неиспользуемые и непроизводственные модули (такие как Devel, Views UI, Rules UI и т. Д.).
  • Отключить нестабильные модули.
  • Отключить статистику .
  • Отключите модуль ядра dblog и замените его на syslog .
  • Отключить основной модуль диспетчера обновлений .
  • Cron: используйте встроенный cron Drupal, а не бедный manscron (рассмотрим Elysia или Ultimate cron).
  • Представления: используйте кэш для представлений на разных уровнях (запрос к базе данных, разметка, на основе времени).
  • Блоки: используйте кеширование блоков, если ваш вид - это блок (на страницу, пользователя и т. Д.).
  • Блоки: рассмотрите возможность настройки параметров кэша на блок с помощью модуля Block Cache Alter .
  • Панели: максимально используйте кеш (для D7 проверьте PCC и PHC модули).
  • Entity: включить Entity cache .
  • При использовании нескольких сред рассмотрите отсутствие модуля, который может улучшить загрузку страницы.
  • Включите кэширование страниц аутентифицированных пользователей с помощью модуля Authcache .
  • Избегайте перенаправлений, которые замедляют работу пользователя.
  • Улучшить аннулирование кэша с помощью модуля Expire .
  • Используйте PHP профилирование перед производством (например, XDebug ).

Drupal интерфейс

  • Минимизируйте HTTP-запросы:
    • Включите агрегацию JS / CSS в разделе « Производительность ».
    • Используйте CSS Sprites для уменьшения количества запросов изображений.
    • Используйте небольшие изображения в качестве встроенных данных (URI в таблице стилей).
    • Используйте Карты изображений, чтобы объединить несколько изображений в одно изображение.
    • Также рассмотрите возможность использования отложенной загрузки изображений (см. Image Lazyloader ).
    • Установите модуль BigPipe, чтобы сократить время загрузки.
    • Рассмотрим Ленивая загрузка против Ленивой оценки.
    • Смотрите: Использование кэша браузера - выставлено!
  • Подумайте о создании внешнего JavaScript и CSS (в некоторых случаях это быстрее).
  • Сократите JavaScript и CSS (см .: Модуль Speedy ). Избегайте встроенных.
  • При ссылке на JS, можно использовать либо deferили asyncатрибуты.
  • Минимизируйте количество фреймов.
  • Оптимизируйте изображения, шрифты, CSS-спрайты, уменьшите размер кэшируемых файлов и уменьшите размер файлов cookie.
  • Сократите количество элементов DOM и ссылки на кэш для доступных элементов.
  • Ускорьте загрузку 404 страниц с помощью модуля Fast 404 .
  • Включите агрегирование и кэширование внешних ресурсов с помощью расширенного агрегирования CSS / JS .
  • Поместите таблицы стилей вверху и сценарии внизу.
  • Добавьте заголовок Expires или Cache-Control , а также ETag, чтобы уменьшить количество ответов.
  • Используйте GET для AJAX и сделайте их кэшируемыми.
  • Компоненты Preload и Post-load, позволяющие использовать браузер в режиме ожидания.
  • Иногда разделение компонентов по доменам может максимизировать параллельные загрузки.
  • Не масштабируйте изображения в HTML и держите компоненты под 25k.
  • Избегайте фильтров, CSS-выражений, HTML-элементов с пустым src или href.
  • Используйте обратный прокси для отладки ваших веб-запросов (например, Чарльз ).
  • Используйте такие инструменты, как Y-Slow и PhantomJS для основных проверок производительности.
  • Используйте инструменты Google PageSpeed для анализа и оптимизации вашего сайта.
  • Читайте о спецификациях W3C Navigation Timing ( GitHub ).

PHP

  • Включите кеширование PHP (например, OpCache , APC ) и настройки настроек.
  • Попробуйте использовать PHP-FPM вместо mod_php и Nginx вместо Apache.

База данных

сервер

Сайты с большим трафиком

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

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


Другие ресурсы:


3

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

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

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


2

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

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

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


2

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

  1. Вы можете настроить это, перейдя по ссылке: YourSiteDomain / admin / config / development / performance
  2. Включить «Кэширование страниц для анонимных пользователей» в разделе «Chaching»
  3. Минимальное время жизни кеша: 1 день (если вы не делаете регулярные обновления)
  4. Срок действия кэшированных страниц: 1 день (если вы не делаете регулярные обновления)
  5. Включить «Сжатие кэшированных страниц»
  6. Включить «Объединять и сжимать CSS-файлы»
  7. Включить «Объединение файлов JavaScript»

  8. После настройки этих параметров перейдите по ссылке: YourSiteDomain / admin / reports / status

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

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

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

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

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


2

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

1) Очистите свой сторожевой стол

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

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

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

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

Источник: Оптимизируйте, прежде чем начать работу


2

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

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

1) Определенно установите и настройте APC, memcache и entitycache.

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

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

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

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

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

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

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

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

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.