Как улучшить производительность моего сайта Drupal7? [закрыто]

10

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

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

Ответы:

26

Это записи из моего опыта, которые могут отличаться от опыта других. Я преимущественно использую стек 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. Кэширование содержимого Views - кэширование содержимого с учетом содержимого 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. Установите для параметра Minimum Cache Life Time Value более высокое значение и используйте модули очистки кэша для очистки кэшей для определенных страниц. Каждый раз, когда я редактирую / обновляю узел, все кэши страниц для анонимного пользователя теряются.

  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. Кластеры базы данных - /programming/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
Гокул Н.К.
источник
2
Отличный ответ, но одна вещь, которая сильно выделяется для меня, это то, что у вас нет APC наверху. APC тривиально легко установить, нет недостатков, и выигрыш может быть очень большим. Я думаю, что это должно идти к вершине. (Может быть, с комментарием, что он не нужен после PHP 5.5, поскольку оптимизация наконец-то стала интегрированной)
Letharion
1
Может также упомянуть кое-что о простейших преимуществах кэширования? Если вашему сайту требуется в основном статический контент (страницы одинаковы для всех пользователей, поэтому не требуется вход в систему), то Varnish или Boost обеспечивают наибольшую прибыль.
Доминик Вудман
5

Уровень базы данных важен. Я рассматриваю некоторые его части и основы в этой презентации http://goo.gl/30yi39

mikeytown2
источник
Потрясающая презентация MikeyTown. Вы профессионал в исполнении :)
Gokul NK
3

В качестве дополнения к ответу Gokul, я думаю о том, что вы хотите кешировать в Drupal (не упорядочено по сложности):

Кэширование означает ускорение повторяющихся действий.

Основные повторяющиеся действия на сайте Drupal:

  • Вызов веб-страницы
  • Запуск PHP-кода для создания веб-страницы
  • PHP вызывает элементы из базы данных

Кэширование всей веб-страницы

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

Вы можете сделать это с помощью Varnish или Boost . Когда пользователь вызывает страницу, он возвращает копию страницы, даже не делая подсчетов.

Однако это не будет работать, если части страницы должны отличаться (т. Е. Пользователи входят в систему и их имя отображается вверху).

Чтобы заставить это работать, вам нужно заглянуть в Authcache.

PHP кеширование

Вы можете кэшировать PHP с помощью APC , или, если у вас версия 5.5 или выше, тогда встроен другой кеш.

Это делается на стороне сервера и означает, что куски вашего PHP-кода будут запомнены. Вы кешируете PHP для Drupal, но технически не взаимодействуете с Drupal.

Кэширование базы данных

Звонки, чтобы получить информацию из базы данных стоят дорого.

Самым распространенным механизмом кэширования базы данных является memcache .

Это кэширует объекты базы данных в ОЗУ, поэтому вместо вызова объекта базы данных на жестком диске вы просто извлекаете его из ОЗУ, что намного быстрее.

Доминик Вудман
источник
1
Redis также является отличным хранилищем кэш-памяти в памяти, по крайней мере сравнимым с memcache в моем опыте (хотя memcache, вероятно, выигрывает при кластеризации)
Клайв