Масштабирование Drupal

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

Какие методы вы пытались улучшить производительность Drupal и какие модули (если есть) вы используете для повышения производительности Drupal "из коробки"?

Ответы

Ответ 1

Переход на страницу admin/settings/performance, включение агрегации CSS и JS, а также кэширование страниц с минимальным сроком службы 1 минуту, дадут вам быстрый импульс на сайте с высоким трафиком. Если вы пишете свой собственный код и делаете какие-либо запросы, подумайте о написании собственного дискретного кэширования для дорогостоящих функций. Связанная статья охватывает Drupal 5, а не 6, но единственным изменением в d6 является устранение требования сериализации и сигнатуры функции для функций cache_set() и cache_get(). (Оба отмечены в комментариях к статье)

На крупных сайтах также рекомендуется отказаться от сервера memcached в сети. Используя модуль memcached, вы можете полностью обойти базу данных drupal для кеширования данные. Если у вас есть огромное количество контента, а поиск - это горячая точка, вы также можете использовать lucene/solr в качестве индексатора поиска вместо встроенного поискового индексатора drupal. Это хорошо для встроенного индексатора, но оно не предназначено для тяжелых нагрузок (сотни или тысячи новых фрагментов контента в час, скажем, с интенсивным искажением). Модуль apache solr может быть связан с этим.

Если вы сильно используете представления, убедитесь, что вы проверили запросы, которые он генерирует для неиндексированных полей; сортировка и фильтрация по CCK-полям, в частности, могут быть медленными, поскольку CCK автоматически не добавляет индексы за основные ключи. В D6 просмотрите View на экране администратора, скопируйте текст запроса и запустите его через EXPLAIN в mysql или какие-либо инструменты анализа запросов, которые у вас есть.

Инструменты, такие как YSlow и Firebug, также могут помочь вам обнаружить медленные файлы, такие как массивные файлы изображений, JS, размещенные на удаленных серверах, и т.д.

Ответ 2

Drupal 6, из коробки, обеспечивает агрегацию css и javascript --- большинство файлов css и js будут объединены в один файл (и, следовательно, один HTTP-запрос), а также сокращены пробелы ( для снижения потребления полосы пропускания). Вы можете включить это под /admin/settings/performance.

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

Кроме того, поскольку Drupal (и все модули, которые вы, вероятно, установили), имеет тонну источника PHP, используя кеш-код опциона PHP, например APC помогает значительно сократить время запроса.

Ответ 3

Я настоятельно рекомендую рекомендацию Бенедикта модуля Boost - только он сделает ваш сайт на общем хостинге, если он настроен правильно, и на самом деле не работает.

Включите агрегацию CSS/JS, включите Boost, и ваш сайт может отлично работать для анонимных пользователей.

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

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

Ответ 4

Помимо кэша по умолчанию для drupal существует еще один способ повышения производительности

Модуль Boost является одним из лучших. memcache, Varnish (Drupal 7/Pressflow), CDN - это другие методы, которые могут улучшить производительность

Ответ 5

Также стоит упомянуть о повышении производительности от использования качественного хранилища SSD. Он постоянно сокращал мои первоначальные времена загрузки ответа на 30% и более при переносе на SSD (я перешел от примерно 450 мс до ~ 250 мс в моем последнем проекте, используя идентичные конфигурации Apache/Memcache/Cloudfront EC2), не говоря уже о том, насколько приятнее это управление мгновенным сервером, где каждая команда или script вы бросаете на нее почти мгновенно. Я никогда не вернусь.