Ромка!eu

  • Отдых
  • Работа
  • Штуки-дрюки
Главная — Блоги — Ромка's blog

Разработка сайта на Drupal. Часть 6. Оптимизация Друпал

  • Просмотреть
  • Голоса

Ромка — Вс, 01/03/2010 - 03:11

161
points

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

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

Методы оптимизации «из коробки»

Сначала рассмотрим, что предлагает Drupal в стандартной поставке. Настройки производительности задаются в меню Administer — Settings — Performance (admin/settings/performance). Первый раздел настроек — страничный кэш, в Drupal эта разновидность кэширования отвечает за показ страниц анонимным посетителям сайта. При включении нормального режима кэширования полностью сгенерированная страница сохраняется в кэше (по умолчанию это таблица БД) и отдается анонимным посетителям, пока в кэш не будут помещены новые данные. Число запросов к СУБД при этом уменьшается до нескольких штук на страницу.

Агрессивный режим работы кэша страниц обеспечивает более высокую производительность, чем нормальный, но он несовместим с некоторыми модулями, которые сообщают об этом на странице администрирования. Дополнительно при агрессивном режиме кэширования можно указать минимальное время, которое кэшированные данные будут отображаться посетителям, т. е. никакие обновления сайта не будут видны анонимным посетителям, пока не пройдет минимальное время. Следует помнить, что кэш страниц не действует для вошедших под своим логином пользователей — они будут всегда видеть актуальную информацию. Если же на сайте большую часть составляют зарегистрированные посетители, то кэш страниц даже в агрессивном режиме не даст значимого эффекта. Тем не менее практически всегда стоит включать нормальный режим кэширования.

Отметим, что полностью выключить кэширование в Drupal нельзя. Функция в настройках производительности отвечает только за страничный кэш, но Drupal также кэширует меню, фильтры ввода, блоки; дополнительные модули могут создавать свои кэши — все эти данные сохраняются в отдельных таблицах БД. Внизу страницы настроек есть кнопка очистки кэша, которая очищает только кэш страниц.

Последний режим в этом разделе — компрессия страниц. Современные браузеры позволяют получать компрессированные данные, снижая объем данных, передаваемых по сети, в среднем в 6–8 раз — разумеется, если сервер умеет отдавать данные в таком сжатом виде. При активации этого режима сжатие выполняется на уровне Drupal, т. е. средствами PHP. В то же время, лучше поручить эту операцию Web-серверу, поскольку он справится с ней эффективнее. Эта операция в Drupal сделана на случай, когда нет возможности включить компрессию страниц на Web-сервере.

Практически из той же серии другой раздел настроек оптимизации — оптимизация трафика. Здесь можно включить слияние CSS и Javascript, отдаваемых сайтом. Различные модули сайта могут добавлять свои стили и скрипты на страницы, в результате запрос страницы браузером влечет за собой десятки мелких файлов со стилями. Эффективнее объединять все файлы в один и отдавать его один раз, что и делает Drupal при включении опций на этой закладке. Держать настройки слияния выключенными имеет смысл только во время разработки сайта, когда стили и скрипты часто меняются и дополняются новыми.

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

Дополнительные модули для оптимизации

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

Наиболее комплексное решение предоставляет модуль cacherouter. Он реализует механизмы кэширования в файлы, в память через «демон» memcached либо использование памяти акселераторов APC и XCache. Как уже отмечалось, Drupal использует в БД разные таблицы под кэши различного назначения. Удобство модуля cacherouter в том, что можно указать для каждого вида кэша, где он должен храниться, например комбинировать кэширование страниц в файлах с кэшированием блоков в memcached.

Способы снижения нагрузки на хостинг

Один из ресурсоемких компонентов Drupal — механизм поиска и индексации контента. Для ускорения поиска по содержимому сайта Drupal строит поисковый индекс, эта операция производится в фоне, при срабатывании планировщика заданий, но отбирает свою долю ресурсов. Реализация поиска в Drupal неплоха и приемлема для большинства небольших сайтов, но при большом объеме контента и высокой посещаемости реализация поиска на PHP может не справляться с нагрузкой. Эффективнее использовать сторонние поисковые системы. Простейший выход здесь — интеграция с поиском Google. Но по многим причинам это не всегда удачный выход. Однако есть великолепные OpenSource-решения для поиска, которые удобно использовать при условии их интеграции с сайтом. Для Drupal разных версий предлагались модули интеграции с несколькими поисковыми движками, в частности для Drupal 6 есть модуль интеграции с поисковым движком Sphinx, выпускаемым под лицензией GPL. Sphinx реализован на языке Cи и предлагает быстрое и масштабируемое решение для поиска по большим объемам данных. В примерах на сайте разработчиков упоминаются хранилища данных емкостью более терабайта и сайты с потоком поисковых запросов в несколько миллионов в день. Даже если объемы данных и число ожидаемых поисковых запросов меньше, использование внешнего поискового движка позволит разгрузить Drupal. Модуль sphinxsearch (http://drupal.org/project/sphinxsearch) заменяет стандартный модуль search на интерфейс к поисковому движку Sphinx. Он сложнее в конфигурировании (благодаря обширным настройкам, предлагаемым в Sphinx), но позволяет реализовать методы поиска, которые имеются в Drupal: по документам, комментариям, пользователям и таксономии. Модуль в настоящее время находится в разработке, но версия для Drupal 6 уже доступна для загрузки.

Стоит помнить, что оптимизация работы Drupal — только один из этапов в оптимизации сайта. Настройки Web-сервера и СУБД, акселерация PHP, настройки ОС и «железа» — все это влияет на работу сайта, поэтому оптимизация работы системы должна проводиться на всех уровнях.

Ссылки на другие части этой статьи:

  • Часть 1. Введение
  • Часть 2. Архитектура Друпала
  • Часть 3. Модули Drupal
  • Часть 4. Интранет-сайт на Друпале
  • Часть 5. Социальная сеть на Друпале
  • Часть 6. Оптимизация Друпал

Содержание всех статей: http://romka.eu/blog/my-drupal-articles

  • Drupal
  • оптимизация
  • статья
  • Ромка's blog
  • Quote

кеширование

Андрей (не проверено) → Чт, 01/07/2010 - 15:55

Роман с Новым Годом и Рождеством Христовым!

Спасибо за статью, но хотелось бы более расширенно. У меня, например, не включается кеширование css файлов на сайте http://www.anpal.net, точнее включается, но цветность исчезает, поэтому пришлось кеширование CSS отключить. Хотелось бы файлы скриптов и CSS объединить в один соответственно, но как правильно сделать нет четких инструкций, а экспериментировать побаиваюсь, чтобы не навредить сайту. То есть, что надо отразить в page.tpl, как создать, например файл скриптов и все туда занести и где этот общий файл должен находиться, полагаю в папке sites\default\files, но твердой уверенности нет.

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

  • ответить
  • quote
  • 11 points

Проблема в теме оформления,

Ромка → Пнд, 01/11/2010 - 17:59

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

  • ответить
  • quote
  • 1 point

У меня на одном из сайтов

Anonymous (не проверено) → Втр, 02/23/2010 - 20:40

У меня на одном из сайтов тоже не работало кеширование css. Проблему нашел довольно быстро, нужно всего-лишь изменить права доступа на папку sites\default\files, либо одну из вложенных папок, сейчас точно сказать не могу.

  • ответить
  • quote
  • -5 points

Кэширование блоков

Илья (не проверено) → Вс, 03/21/2010 - 02:16

У меня включено нормальное кэширование.
При этом на сайте есть блок, в котором отображаются случайные данные.
Т.е. этот блок не должен кэшироваться, а каждый раз должен выдавать новый случайный результат. Как можно добиться такого результата, не отключая кэширование?

Спасибо. :)

  • ответить
  • quote
  • -9 points

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.
  • Вы можете использовать тэг <code></code> для подсветки синтаксиса программного кода. The supported tag styles are: <foo>, [foo].
  • You may quote other posts using [quote] tags.

Подробнее о форматировании

CAPTCHA
Если вы человек, а не робот, то введите текст с картинки. Если вы робот, то велкам ту майкрософт.ком.
Image CAPTCHA
Enter the characters shown in the image.

Обо мне

Всем привет!
Меня зовут
Роман Архаров, я профессиональный веб-разработчик, программирую на языках PHP, Python и Action-Script, в работе использую фреймворки Drupal и Django. В этом блоге я размещаю заметки и статьи, связанные с моей работой, отдыхом и другими интересными мне темами.

Похожие заметки

  • Несколько статей о Друпале
  • Пример разработки плагина для модуля CCK
  • Темизация Drupal. Часть 2. Анатомия темы оформления Drupal
  • Темизация Drupal. Часть 1
  • Разработка модуля для Drupal. Часть2

Популярные заметки

  • AJAX. Обмен данными между клиентом и сервером, закачка на сервер файлов без перезагрузки страницы при помощи библиотеки jQuery.
  • Темизация Drupal. Часть 2. Анатомия темы оформления Drupal
  • Темизация Drupal. Часть 4. Темизация Views
  • Темизация Drupal. Часть 1
  • Несколько статей о Друпале
  • Тестирование модуля "Inner poll"
  • Разработка сайта на Drupal. Часть 3. Модули Drupal.
  • Автоматическая "газетная" верстка (верстка в несколько колонок)
  • Backup-manager — настройка резервного копирования Linux-сервера на Amazon S3 за 5 минут
  • Разработка сайта на Drupal. Часть 2. Архитектура Drupal.

Подписка


Последние комментарии

  • Артем → Темизация Drupal. Часть 4. Темизация Views → Спасибо большое!
  • Anonymous → Темизация Drupal. Часть 2. Анатомия темы оформления Drupal → Большое спасибо автору за
  • Yor Ik → Авторизация на Drupal-сайте с помощью аккаунта вКонтакте → при входе на сайте
  • Химик → Home sheep home → Игра просто поглатитель времени
  • Artu → Темизация Drupal. Часть 4. Темизация Views → Спасибо,
  • icemen → Разработка модуля для Drupal. Часть2 → Благодарности
  • Федор → Проверка имени пользователя на наличие букв из разных алфавитов → . . . . . . . . . . . . . . .
  • oZEROth2008 → Авторизация на Drupal-сайте с помощью аккаунта вКонтакте → ответьте на мой вопрос
  • witalikm → Drupal for Firebug → После вашего совета пробовал
  • Shu → Drupal for Firebug → F12

Новые заметки

  • Авторизация на Drupal-сайте с помощью аккаунта ВКонтакте
  • Home sheep home
  • Backup-manager — настройка резервного копирования Linux-сервера на Amazon S3 за 5 минут
  • Зима 2010. Поездка в Тайланд, Индонезию и Сингапур. Часть 3 — Бали, Сингапур, Пхукет
  • Зима 2010. Поездка в Тайланд, Индонезию и Сингапур. Часть 2 — Джокьякарта
  • Зима 2010. Поездка в Тайланд, Индонезию и Сингапур. Часть 1 — Пхукет и Джакарта
  • Шпаргалка по командам и хоткеям Unix
  • Семинар по хапкидо в Днепропетровске
  • О планах
  • Несколько статей о Друпале

Тэги

dckyiev09 Drupal jquery Индонезия Отдых Работа Штуки-дрюки зима зима 2010 модуль статья темизация
еще тэги

Вход для пользователей

Что такое OpenID?
  • Войти по OpenID
  • Скрыть вход по OpenID
  • Зарегистрироваться
  • Запросить новый пароль

Навигация

  • Exchange rate
  • Vote up/down
  • Переход по внешней ссылке
  • Последние сообщения
  • Фотогалереи

Курсы валют

  • 100 Казахских тенге — 20,8329 (-0.09)
  • 10 Украинских гривен — 38,8969 (-0.14)
  • 10 Китайских юаней — 45,0421 (-0.17)
  • 100 Японских иен — 36,4634 (-0.11)
  • 1 Доллар США — 30,6858 (-0.11)
  • 1 Евро — 39,2901 (+0.12)
  • 1000 Белорусских рублей — 10,1743 (-0.04)
  • 1 Турецкая лира — 20,2279 (0)

10 случайных заметок

  • Backbird — скажи "прощай" алертам или удобная отладка java-script.
  • Эксперименты с вКонтакте API
  • Куба. Лето 2008. Часть 1
  • Сегодня 256 день в году — день программиста
  • Лето 2007. Путешествие в Камбоджу – Таиланд – Малайзию. Часть 4. Камбоджа, СеамРип и Ангор Ват, лето
  • Швабрашвабр.ру — пример коллективного блога с элементами соц сети, построенный на CMS Drupal
  • Куба. Лето 2008. Часть 2
  • Вспомнил детство
  • Лето 2007. Путешествие в Камбоджу – Таиланд – Малайзию. Часть 6. Куала-Лумпур.
  • Темизация Drupal. Часть 1

Случайные фото

Я и кокос... Где то я это уже видел...
Буквы
Арка
В Сингапурском зоопарке. Будда?
Взгляд в будущее
Копенгаген, Кристиания, Граффити 5
А это уже полуостров Крым, на пути в Керчь.
Я и мой автопарк :))
Еще горы
Я на
Вид на Осло из замка Акерхус
Вечерний Копенгаген
Просто море
Тринидадские спортсменчики
Парашютист в Варадеро
Я и моя тень
  • Отдых
  • Работа
  • Штуки-дрюки

При использовании материалов с сайта, пожалуйста, ставьте ссылку на источник. E-mail для связи: mne@romka.eu.