Как вы улучшаете производительность Drupal?
Drupal быстро развивается, но производительность настолько слабая. Трудно достичь 50 запросов в секунду.
И есть очень много SQL-запросов на простой веб-странице. Если вы проверите время запроса формы, отправьте ее на Drupal.org, она всегда займет несколько секунд.
Как вы улучшаете скорость своего веб-сайта?
10 ответов
Кэширование, кеширование и кеширование.
Некоторые предложения, которые я ранее приводил к аналогичному вопросу о d.o.
- Полагая Лак или другой обратный прокси перед вашим http-deamon, возможно, это самая лучшая вещь, которую вы можете сделать.
- Во время DrupalCon Copehagen Rasmus заявил, что с использованием кеша кода операции php, такого как APC , является одной из лучших вещей, которые вы можете сделать для ускорения работы PHP в целом. Производительность улучшается с использованием новых версий PHP. Кроме того, есть дополнительные преимущества для обновления PHP при обновлении Drupal. От 6 до 8 Drupal проведет большой сдвиг в сторону ориентации объекта, что также связано с улучшением производительности в новых версиях PHP.
- Memcache - популярный выбор для ускорения кеша, помещая кеш в память вместо диска.
- Панели + Кэширование в сочетании с Действия кэша может значительно повысить производительность, даже для зарегистрированных пользователей, поскольку она поддерживает довольно сложную логику.
- Кэш-сущность сайта - отличное ускорение с нулевой скоростью для всех, кто использует Drupal 7.
- У записей с тяжелыми сайтами меньше «хорошо установленных» решений. Некоторые варианты включают.
- Перемещение частых записей полностью, например статистика, где-то еще, например, аналитика google.
- Кэширование частых операций записи с помощью настраиваемого решения в чем-то вроде NodeJS, которое будет записываться в БД раз в X-ю секунду.
- Пожертвуйте священный ACID и используйте базу данных, например MongoDB . (См. Комментарий Бердира ниже)
- Скопируйте вашу SQL-базу данных. Делает чтение из одной базы данных, пишет в другую. Это является родным для D7, а Pressflow может помочь с этим в D6.
Это заметки из моего опыта и могут отличаться от того, что испытывают другие. Я преимущественно использую стек LAMP и в моих предложениях рассматривал то же самое.
Правила для кэширования, которые я обычно соблюдаю.
- Процесс после использования нескольких раз.
- Живи со старыми данными, когда это возможно.
- Очистить кеши нечасто и сохранить его очень конкретным.
- По возможности сделайте изменения на самом низком уровне в стеке. LAMP - DCCc: Linux, Apache, Mysql, PHP, Drupal Core, Contrib и настраиваемый модуль.
Повысить производительность сайта Drupal (в возрастающем порядке сложности)
-
Обновите основной модуль, добавьте модуль и темы. Да, это вопросы.
-
Установите APC на свой сервер. (Переведено вверх, основываясь на Letharion)
-
Кэширование страниц: admin /config /development /performance Разница между минимальным временем жизни кеша и истечением кешированных страниц
- Блокировка кэширования https://drupal.org/project/blockcache_alter Параметры кэширования для всех блоков .
- Совокупные файлы javascript и css - Улучшения в интерфейсе https://www.drupal.org/project/advagg
- Отключить ненужные модули. Каждый модуль добавляет к количеству кода которые должны быть доступны для загрузки страницы. И это также увеличивает количество поисковых запросов. По возможности используйте общий модуль в место нескольких модулей, которые выполняют определенные функции.
- Содержимое кэш-контента - контентное кэширование для просмотров https://www.drupal.org/project/views_content_cache
- Отключить ведение журнала БД - используйте https://drupal.org/project/syslog_ng
- Уменьшить 404 ошибки - http://www.brokenlinkcheck.com/
- Fast 404 Responses - https://drupal.org/project/fast_404 - Попробуйте обработка на уровне сервера.
- Проверка на стороне клиента - https://www.drupal.org/project/clientside_validation
- Сжатие изображения - https://www.drupal.org/project/imageapi_optimize
- Lazy Загрузка изображений - Не загружайте ненужные изображения - https://www.drupal.org/project/lazyloader
-
Использование спрайтов - https://www.drupal.org/project/spritesheets
-
Установите минимальное значение времени жизни кэша на большее число и используйте модули очистки кэша для очистки кешей для определенных страниц - Всякий раз, когда я редактирую /обновляю узел, все кэши страниц для анонимного пользователя теряются
- Используйте модуль Devel для просмотра запросов.
- Rewrite Views Queries /avoid Views, если его избыток.
- XHProf - https://www.drupal.org/project/XHProf
- FPM, HHVM.
- Профилирование и настройка БД - https://www.drupal.org/project/dbtuner
- Использовать Boost , не используйте Bootstrap DB, если это не требуется. https://drupal.org/project/boost Для большинства малых и средних сайтов Boost хорош достаточно, и вам могут не потребоваться обратные прокси или так.
- Использовать CDN - https://www.drupal.org/project/cdn Его легко настраивается.
- Если ваши таблицы кеша огромны, используйте Memcached - если вы можете установить memcached и настроить RAM для него, это не так сложно, как кажется.
- Etags - правильно настроить Etags. https: //разработчик. yahoo.com/blogs/ydnfiveblog/high-performance-sites-rule-13-configure-etags-7211.html
- Использовать обратный прокси-сервер - Лак (по крайней мере для активов). Помогает, если большинство ваших пользователей анонимны.
- Сжатый перевод - Включить gzipСжатие литий>
- Keep Alive - использовать постоянные соединения там, где это возможно.
- Прогрессивный JPEGS -
- CACHING IN CODE - блог Eaton - это потрясающе. http://www.lullabot.com/blog/статьи /новички-гид-кэширование данных Друпал-7
- Внедрение Cache Warming - https://www.drupal.org/project/cache_warmer - Кэш. Согрейте страницы до того, как их ударит конечный пользователь.
- Master Slave DB Config - https://www.drupal.org/project/autoslave упрощает настройку.
- Кластеры базы данных - https://stackoverflow.com/questions/1163216/database-cluster- и-балансировки нагрузки
- Load Balancers - http://en.wikipedia.org/wiki/Load_balancing_(computing )
- Использовать эвристическое потепление кеша - https://www.drupal.org/project/cache_graceful
- Аутентифицированное кэширование пользователей - https://www.drupal.org/project/authcache
Boost также очень полезен, он создает статические кеши файлов с ваших веб-страниц. Это в основном для сайтов с большим количеством анонимного пользовательского трафика.
Boost обеспечивает статическое кэширование страниц для Drupal, что позволяет значительно повысить производительность и масштабируемость сайтов, которые получают в основном анонимный трафик. Для общего хостинга это ваш лучший вариант с точки зрения повышения производительности. На выделенных серверах вы можете вместо этого использовать Лак.
Apache полностью поддерживается, с поддержкой Nginx, Lighttpd и IIS 7. Boost будет кэшировать & gzip compress html, xml, ajax, css и amp; JavaScript. Ускорение логики вывода кеша очень продвинуто; довольно просто иметь разные времена жизни кэша для разных частей вашего сайта. Встроенный сканер гарантирует, что истекший контент быстро восстанавливается для быстрой загрузки страницы.
Следует отметить, что если вы используете драйвер базы данных SQLIte, вам может потребоваться отключить синхронизацию диска.
/**
* Implements hook_init().
*/
function HOOK_init() {
db_query('PRAGMA synchronous = OFF');
}
В некоторых конфигурациях сервера это значительно улучшит производительность.
Секрет производительности Drupal заключается в кешировании и соблюдении хороших практик. Предложения:
Внутренний интерфейс Drupal
- Включить кеширование в разделе Производительность .
- Отметьте Производительность и Модули производительности и масштабируемости .
- Отметьте Drupal 7 Параметры оптимизации производительности и контрольный список .
- Отключить неиспользуемые и непроизводственные модули (например, Devel, Views UI, UI правил и т. д.).
- Отключить нестабильные модули.
- Отключить статистику .
- Отключить основной модуль dblog и заменить syslog .
- Отключить модуль ядра обновления .
- Cron: используйте встроенный cron Drupal, а не poormanscron (рассмотрите Elysia или Ultimate cron).
- Просмотры: Используйте кеш для просмотров на разных уровнях (запрос базы данных, разметка, время).
- Блоки: используйте кэширование блоков, если ваше представление является блоком (на странице, пользователю и т. д.).
- Блоки. Подумайте о настройке настроек кэша на блок с помощью модуля Cache Alter .
- Панели: максимально используйте кеш (для проверки D7 PCC & модули PHC ).
- Entity: Включить Кэш сущности .
- При использовании нескольких сред рассмотрите отсутствующий модуль , который может улучшить загрузку страницы.
- Включить кэширование страниц аутентифицированных пользователей с помощью модуля Authcache .
- Избегайте перенаправления, которые замедляют работу пользователя.
- Уточнить недействительность кэша с помощью Expire module.
- Используйте профилирование PHP перед производством (например, XDebug ).
Внешний интерфейс Drupal
- Минимальный запрос HTTP по:
- Включить агрегацию JS /CSS в разделе Производительность .
- Используйте CSS Sprites для уменьшения количества запросов изображения.
- Используйте небольшие изображения как встроенные данные (URI в таблице стилей).
- Используйте карты изображений , чтобы объединить несколько изображений в одно изображение.
- Также рассмотрите возможность использования загрузки ленивых изображений (см. Image Lazyloader ).
- Установите модуль BigPipe , чтобы уменьшить время загрузки.
- Рассмотрим ленивую загрузку и ленивую оценку.
- Смотрите: Использование кэша браузера - открыт!
- Рассмотрите возможность создания некоторых JavaScript и CSS External (в некоторых случаях это быстрее).
- Минимизировать JavaScript и CSS (см. Speedy модуль). Избегайте встроенных.
- При обращении к JS используйте атрибуты
defer
илиasync
. - Минимизировать количество фреймов.
- Оптимизировать изображения, шрифты, CSS-спрайты, сделать favicon небольшим кешированием и уменьшить размер файлов cookie.
- Уменьшить количество элементов DOM и ссылок на кеш к доступным элементам.
- Сделайте 404 страницы быстрее, используя Fast 404 модуль.
- Включить агрегирование и кэширование внешних компонентов с помощью Расширенное агрегирование CSS /JS .
- Поместите стили сверху и скрипты внизу.
- Добавьте заголовок Expires или Cache-Control , а также ETags , чтобы уменьшить ответы.
- Используйте GET для AJAX и сделайте ихкэшируется.
- Предварительно загружать и загружать компоненты, чтобы использовать время, в течение которого браузер не работает.
- Иногда разделение компонентов по доменам может максимизировать параллельные загрузки.
- Не масштабируйте изображения в HTML и не храните компоненты под 25k.
- Избегайте фильтров, выражений CSS, элементов HTML с пустым src или href.
- Используйте обратный прокси для отладки ваших веб-запросов (например, Charles ).
- Используйте инструменты, такие как Y-Slow и PhantomJS для основных проверок производительности.
- Используйте инструменты PageSpeed , чтобы анализировать и оптимизировать ваш сайт.
- Подробнее о W3C Navigation Timing specs ( GitHub ).
PHP
- Включить кэширование PHP (например, OpCache , APC ) и настройки настройки.
- Рассмотрите возможность использования PHP-FPM вместо mod_php плюс Nginx вместо Apache.
База данных
- Отметьте рекомендуемые настройки сервера базы данных для Drupal.
- Смотрите: Инструменты, советы и ссылки по оптимизации MySQL .
- Измените конфигурацию MySQL на mysqltuner.pl .
- Рассмотрите возможность использования MariaDB вместо MySQL.
Сервер
- Отметьте рекомендуемые системные требования для Drupal.
- Отметьте рекомендуемые настройки веб-сервера для Drupal.
- Отметьте рекомендуемые настройки конфигурации PHP для Drupal.
- Убедитесь, что хостинг находится на быстрых устройствах хранения (например, SSD).
- Использовать выделенный высоконадежный сервер в качестве против общего хостинга.
- Установите Redis или memcached (с поддержкой igbinary) и настроить Drupal для его использования.
- Определить длинные TTL для поисковых систем (например, TTL в 24 часа избегает ботов, поступающих на сервер).
- Уменьшить DNS-запросы (убедитесь, что они кэшированы).
Веб-сайты с высоким трафиком
Если вы ожидаете высокой загрузки вашего сайта, используйте Лак. Рассмотрим также использование CDN.
Подробнее: Опыт реального мира в масштабировании и настройке
Дополнительные ресурсы:
- O'Reilly: электронная книга, посвященная веб-эффективности, даже более быстрые веб-сайты.
- Andy Still, Web Performance Warrior - Бизнес скорости.
- Оптимизация производительности Drupal - результаты тестов ( PDF )
- ACQ-142 Эффективная электронная книга
- 5 ошибок, которые следует избегать на вашем Веб-сайт Drupal - Acquia
- Окончательное руководство по Drupal 8 - Acquia
- Yahoo: Лучшие практики для ускорения вашего веб-сайта , Исключительная производительность
- Google: Правила безопасности страницыSpeed , Прогрессивное веб-приложение .
- Waterfalls 101: Как использовать диаграмму водопада, чтобы диагностировать бодрость вашего сайта
- (видео) Быстрое создание быстродействующих сайтов (O'Reilly ) литий>
Существует книга под названием Высокопроизводительный Drupal , который содержит лучшие практики, примеры и подробные объяснения для решения нескольких проблем производительности и масштабируемости. Вы узнаете, как применять методы кодирования и инфраструктуры для внутренних компонентов Drupal, производительности приложений, баз данных, веб-серверов и анализа производительности.
В Производительность и масштабируемость в Drupal 7 вы можете найти несколько примеров о Drupal 6 и Drupal 7 и следующем списке:
Проекты производительности и масштабируемости Drupal 7 для просмотра:
- https://www.drupal.org/project/agrcache
- https://www.drupal.org/project/apc
- https://www.drupal.org/project/beanstalkd
- https://www.drupal.org/project/boost
- https://www.drupal.org/project/cdn
- https://www.drupal.org/project/core_library
- https://www.drupal.org/project/entitycache
- https://www.drupal.org/project/efq_views
- https://www.drupal.org/project/hash_wrapper
- https://www.drupal.org/project/labjs
- https://www.drupal.org/project/headjs
- https://www.drupal.org/project/media_amazon
- https://www.drupal.org/project/memcache
- https://www.drupal.org/project/mongodb
- https://www.drupal.org/project/performance_hacks
Было много настроек, чтобы оптимизировать производительность вашего сайта Drupal, но не все это обязательно. Мы должны осмотреть некоторые альтернативы и методы, которые приведут к оптимизации платформы Drupal. Кэш, да, это способ оптимизировать веб-сайт с помощью различных средств, но некоторые дополнительные дополнения и советы могут увеличить и настроить ваш сайт без каких-либо трудностей, которые необходимо предпринять.
Недавно мы опубликовали аналогичную статью на нашем веб-сайте, которая, как я полагаю, поможет вам в работе по настройке.
Источник: http://www.cloudreviews.com/blog/drupal- советы по оптимизации производительности
Есть несколько возможностей улучшить скорость Drupal на разумном уровне, не устанавливая никаких новых модулей. Да, Drupal имеет конфигурацию производительности.
- Вы можете настроить это, выбрав: YourSiteDomain /admin /config /development /performance
- Включить 'страницы кэша для анонимных пользователей' в разделе Chaching
- Минимальное время жизни кеша: 1 день (если вы не делаете регулярных обновлений)
- Срок действия кэшированных страниц: 1 день (если вы не делаете регулярных обновлений)
- Включить «Сжатие кэшированных страниц»
- Включить «Скомпилировать и сжать файлы CSS»
-
Включить «Агрегатные файлы JavaScript»
-
После установки этих конфигураций перейдите к: YourSiteDomain /admin /reports /status
- Проверьте, есть ли какие-либо проблемы с разрешением для каталогов 'css' и 'js'
- Исправить разрешение, указанное на странице отчета о состоянии
И теперь вы закончили оптимизацию скорости для своего сайта drupal 7.
Есть несколько онлайн-инструментов для проверки скорости, чтобы проверить скорость. Обязательно используйте один из инструментов проверки скорости и запустите тест перед обновлением вышеуказанных настроек. И однажды после того, как вы обновили настройку производительности, запустите тест скорости снова. Вы обязательно увидите улучшение.
Pingdom и HTTP Fox (плагин FireFox) - лучшие инструменты для проверки скорости сайта.
Приведенные выше настройки не только кэшируют ваши страницы для анонимных пользователей, но и сжимают файлы CSS и JS. Например, если ваш сайт загружает 80 файлов, отправьте эти настройки, количество запросов сократится, по крайней мере, на 50%, поэтому здесь у вас есть 2-кратное улучшение скорости на вашем сайте Drupal.
В качестве стороннего разработчика всегда есть возможность улучшить ваш код, чтобы повысить производительность веб-сайта. Некоторые рекомендации для сторонних разработчиков:
1) Очистите таблицу сторожевого таймера
2) Не злоупотребляйте переменным API
3) Сделать меньше запросов HTTP /
4) Сократите свой «точечный модуль»
Когда дело доходит до разработчиков шрифтов и сайтов, гораздо больше можно достичь, но важно учитывать производительность с каждой точки зрения.
Неоптимизированный сайт 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 запросов в секунду.
Сайт обслуживает пользователей, прошедших проверку подлинности:
Оптимизация такого сайта более сложна. Такие сайты попадают в одну из двух подкатегорий для целей оптимизации:
(a) Большинство страниц на сайте идентичны, за исключением 1 или 2 блоков, которые имеют пользовательскую информацию. Напр. Сайт Drupal Commerce.
(b) Большинство страниц полностью настроены для пользователя. Напр. Сайт Drupal Commons.
Если ваш сайт попадает в категорию (a), тогда примените большинство методов, которые мы обсуждали для сайта, обслуживающего в основном анонимных пользователей. Единственное различие заключается в том, что для страниц, не относящихся к администратору, Varnish должен будет удалить cookie SESSION из заголовка и обслуживать кешированные страницы. Используйте модуль блока AJAX для блоков сервера с пользовательской информацией, используя AJAX. Таким образом, большая часть страницы будет очень быстро использоваться с использованием Varnish, и тогда пользовательская информация будет передаваться через AJAX.
Если ваш сайт попадает в категорию (b), используйте модуль Authcache. Я предпочитаю не использовать его как можно больше, потому что он требует довольно небольшой конфигурации и обслуживания. Но это действительно хорошо работает. Это будет не так быстро, как использование Varnish, но он сможет обрабатывать 50 запросов в секунду, которые вы ищете.
Если вы хотите перейти выше и дальше того, что мы обсудили здесь, посмотрите на «Контрольный список оптимизации производительности Drupal» . Раскрытие: Это написано мной. Он приводит исчерпывающий список вещей, которые вы можете сделать, чтобы сайт Drupal быстро вспыхнул.