Как вы улучшаете производительность Drupal?
Drupal быстро развивается, но производительность очень низкая. Трудно достичь 50 запросов в секунду.
И на простой веб-странице так много SQL-запросов. Если вы проверяете время запроса формы, отправляемой в Drupal.org это всегда займет несколько секунд, чтобы закончить.
Как вы повышаете скорость своего веб-сайта?
10 answers
Кэширование, кэширование и кэширование.
Некоторые предложения, которые я ранее давал на аналогичный вопрос по d.o.
- Размещение лака или другого обратного прокси-сервера перед вашим http-демоном, вероятно, лучшее, что вы можете сделать.
- Во время DrupalCon Copehagen Расмус заявил, что использование кэша кода операции php, такого как APC, является одной из лучших вещей, которые вы можете сделать для ускорения PHP в целом. Производительность повышается с более новыми версиями PHP. Обновление PHP также дает дополнительные преимущества при обновлении Drupal. С 6 по 8 в Drupal произойдет серьезный сдвиг в сторону объектной ориентации, что также связано с большинством улучшений производительности в новых версиях PHP.
- Memcache является популярным выбором для ускорения кэширования, помещая кэш в память вместо диска.
- Панели + Кэширование в сочетании с Действиями кэша может значительно повысить производительность даже для зарегистрированные пользователи, так как он поддерживает довольно сложную логику.
- Кэш сущностей является хорошим и нулевым ускорением для всех, кто использует Drupal 7.
- Сайты с большим объемом записи имеют меньше "хорошо зарекомендовавших себя" решений. Некоторые варианты включают в себя.
- Перемещение частых записей полностью, например статистики, в другое место, например в Google analytics.
- Кэширование частых операций записи с помощью пользовательского решения в чем-то вроде NodeJS, которое будет записывать данные в БД раз в X второй.
- Пожертвуйте священной КИСЛОТОЙ и используйте базу данных, такую как MongoDB. (См. Комментарий Бердира ниже)
- Кластеризуйте свою SQL-базу данных. Выполняйте чтение из одной базы данных, запись в другую. Это является родным для D7, и Pressflow может помочь с этим в D6.
Это заметки из моего опыта и могут отличаться от того, что испытывают другие. Я в основном использую стек ЛАМП и рассмотрел то же самое в своих предложениях.
Правила большого пальца для кэширования, которым я обычно следую.
- Обработайте Один Раз, Используйте Несколько Раз.
- По возможности работайте с устаревшими данными
- Нечасто очищайте кэши и сохраняйте их очень конкретными.
- По возможности вносите изменения на самом низком уровне стека. ЛАМПА - DCCc: Linux, Apache, Mysql, PHP, ядро Drupal, Contrib и пользовательский модуль.
Повышение производительности сайта Drupal (в порядке возрастания сложности)
Обновляйте ядро, модуль contrib и темы. Да, это имеет значение.
Установите APC на свой сервер. (Перемещено в начало на основе предложения от Летарион)
Кэширование страниц: администратор/конфигурация/разработка/производительность Разница между минимальным сроком службы кэша и истечением кэшированные страницы
- Кэширование блоков 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 /
- Быстрые 404 ответа - https://drupal.org/project/fast_404 - Попробуйте выполнить обработку на уровне сервера.
- Проверки на стороне клиента - https://www.drupal.org/project/clientside_validation
- Сжатие изображения - https://www.drupal.org/project/imageapi_optimize
- Отложенная загрузка изображений - Не загружайте ненужные изображения - https://www.drupal.org/project/lazyloader
Используйте листы спрайтов - https://www.drupal.org/project/spritesheets
Установите значение минимального срока службы кэша на большее число и используйте модули очистки кэша для очистки кэшей для конкретные страницы - Всякий раз, когда я редактирую/обновляю узел, все кэши страниц для анонимного пользователя теряются
- Используйте модуль разработки для просмотра запросов.
- Перепишите запросы представлений /избегайте представлений, если это перебор.
- XHProf - https://www.drupal.org/project/XHProf
- FPM, HHVM.
- Профилирование и настройка БД - https://www.drupal.org/project/dbtuner
- Используйте Boost, не загружайте базу данных, если это не требуется. https://drupal.org/project/boost Для большинства небольших и средних сайтов повышение достаточно хорошо, и вам могут не понадобиться обратные прокси или что-то в этом роде.
- Использовать CDNs - https://www.drupal.org/project/cdn Его легко настроить.
- Если ваши таблицы кэша огромны, используйте Memcached - Если вы можете установить memcached и настроить для него оперативную память, это не так сложно, как кажется.
- Etags - Настройка Etags должным образом. https://developer .yahoo.com/blogs/ydnfiveblog/high-performance-sites-rule-13-configure-etags-7211.html
- Используйте Обратный прокси-сервер - Лак (по крайней мере, для активов). Очень помогает, если большинство ваших пользователей анонимны.
- Сжатая передача - Включить сжатие gzip
- Поддерживайте связь - Используйте постоянные соединения, где это возможно.
- Прогрессивные JPEG-файлы -
- КЭШИРОВАНИЕ В КОДЕ - блог Итона потрясающий. http://www.lullabot.com/blog/article/beginners-guide-caching-data-drupal-7
- Реализовать прогрев кэша - https://www.drupal.org/project/cache_warmer - Кэш Прогревает страницы до того, как на них попадет конечный пользователь.
- Конфигурация БД ведущего ведомого устройства - https://www.drupal.org/project/autoslave облегчает вам его настройку.
- Кластеры баз данных - https://stackoverflow.com/questions/1163216/database-cluster-and-load-balancing
- Балансировщики нагрузки - http://en.wikipedia.org/wiki/Load_balancing_ (вычисления)
- Использовать эвристическое прогревание кэша - https://www.drupal.org/project/cache_graceful
- Кэширование аутентифицированного пользователя - https://www.drupal.org/project/authcache
Модуль Boost также весьма полезен, он создает статические кэш-файлы с ваших веб-страниц. Это в основном для сайтов с большим количеством анонимного трафика пользователей.
Boost обеспечивает статическое кэширование страниц для Drupal, обеспечивая очень значительное повышение производительности и масштабируемости для сайтов, которые получают в основном анонимный трафик. Для общего хостинга это ваш лучший вариант с точки зрения повышения производительности. На выделенных серверах вы можете рассмотреть возможность использования лака вместо.
Apache полностью поддерживается, с полу-поддержкой Nginx, Lighttpd и IIS 7. Boost будет кэшировать и gzip сжимать html, xml, ajax, css и javascript. Логика истечения срока действия кэша очень развита; довольно просто иметь разное время жизни кэша для разных частей вашего сайта. Встроенный искатель обеспечивает быстрое восстановление содержимого с истекшим сроком действия для быстрой загрузки страницы.
Стоит отметить, что если вы используете драйвер базы данных SQLite, вам, возможно, придется отключить синхронизацию дисков.
/**
* Implements hook_init().
*/
function HOOK_init() {
db_query('PRAGMA synchronous = OFF');
}
В некоторых конфигурациях серверов это значительно повысит производительность.
Секрет производительности Drupal заключается в кэшировании и следовании передовым практикам. Предложения:
Серверная часть Drupal
- Включите кэширование в разделе Производительность .
- Проверьте Производительность и Контрольный список производительности и масштабируемости модулей.
- Проверьте Параметры оптимизации производительности Drupal 7 и контрольный список.
- Отключите неиспользуемые и непроизводственные модули (такие как Разработка, Пользовательский интерфейс представлений, пользовательский интерфейс правил, и т.д.).
- Отключите нестабильные модули.
- Отключить статистику.
- Отключите основной модуль dblog и замените его на системный журнал.
- Отключить Ядро диспетчера обновлений модуль.
- Cron: Используйте встроенный cron Drupal, а не poormanscron (рассмотрим Elysia или Ultimatecron).
- Просмотры: Используйте кэш для представлений на разных уровнях (запрос базы данных, разметка, на основе времени).
- Блоки: Используйте кэширование блоков, если ваше представление является блокировать (по странице, пользователю и т.д.).
- Блоки: Рассмотрите возможность настройки параметров кэша для каждого блока с помощью модуля Изменение кэша блоков .
- Панели: Используйте кэш как можно больше (для проверки D7 PCC & Модули PHC).
- Сущность: Включить Кэш сущностей.
- При использовании нескольких сред рассмотрите отсутствующий модуль , который может улучшить загрузку страницы.
- Включить кэширование страниц аутентифицированных пользователей с помощью Authcache модуль.
- Избегайте перенаправлений, которые замедляют работу пользователя.
- Улучшите аннулирование кэша с помощью модуля Истекает срок действия .
- Используйте профилирование PHP перед производством (например, xdebug).
Интерфейс 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.
База данных
- Проверьте рекомендуемые настройки сервера баз данных для Drupal.
- См.: Инструменты, советы и ссылки по оптимизации MySQL.
- Настройте свой Конфигурация MySQL с помощью mysqltuner.pl.
- Рассмотрите возможность использования MariaDB вместо MySQL.
Сервер
- Проверьте рекомендуемые системные требования для Drupal.
- Проверьте рекомендуемые настройки веб-сервера для Drupal.
- Проверьте рекомендуемые параметры конфигурации PHP для Drupal.
- Убедитесь, что хостинг находится на устройствах быстрого хранения (например, SSD).
- Используйте выделенный быстрый надежный сервер в качестве противовеса на общий хостинг.
- Установите Redis или memcached (с поддержкой igbinary) и настройте Drupal для его использования.
- Определите более длинные TTL для поисковых систем (например, TTL в 24 часа позволяет избежать попадания ботов на сервер).
- Сократите поиск DNS (убедитесь, что они кэшированы).
Сайты с высоким трафиком
Если вы ожидаете высокой загрузки вашего сайта, используйте лак. Рассмотрите также возможность использования CDN.
Подробнее читайте по адресу: Реальный мировой опыт масштабирования и производительность настройки
Дополнительные ресурсы:
- О'Рейли: Электронная книга "Дневник веб-производительности", Еще более быстрые веб-сайты
- Энди Стилл, Воин веб-производительности - Бизнес скорости
- Оптимизация производительности Drupal - Результаты тестирования (PDF)
- Электронная книга производительности ACQ-142
- 5 ошибок, которых следует избегать на Вашем веб-сайте Drupal - Acquia
- Окончательное руководство по Drupal 8 - Аквия
- Yahoo: Рекомендации по ускорению работы Вашего Веб-Сайта, Исключительная производительность
- Google: Правила анализа скорости просмотра страниц, Прогрессивное Веб-Приложение.
- Водопады 101: Как использовать диаграмму водопада для диагностики проблем с производительностью вашего сайта
- (видео) Быстрое создание адаптивных веб-сайтов (О'Рейли)
Существует книга под названием Высокопроизводительный 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-performance-optimization-tips
Есть некоторые возможности повысить скорость Drupal до разумного уровня, не устанавливая никаких новых модулей. Да, у Drupal есть конфигурация производительности.
- Вы можете настроить это, перейдя по адресу: Ваш домен/администратор/конфигурация/разработка/производительность
- Включить "Кэширование страниц для анонимных пользователей" в разделе Кэширование
- Минимальный срок службы кэша: 1 день (если вы не выполняете регулярные обновления)
- Срок действия кэшированных страниц: 1 день (если вы не выполняете регулярные обновления)
- Включить "Сжатие кэшированных страниц"
- Включить "Агрегировать и сжимать CSS-файлы"
Включить "Агрегировать файлы JavaScript'
Как только эти настройки будут установлены, перейдите по ссылке: Ваш домен/администратор/отчеты/статус
- Проверьте, есть ли какие-либо проблемы с разрешениями для каталогов "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) Поместите прокси-сервер перед веб-сервером. Установка и настройка занимает около 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 быстро заработал.