Ромка!eu

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

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

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

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

349
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
  • 6 points

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

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

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

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

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

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

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

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

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

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

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

Спасибо. :)

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

Спасибо. Буду пробовать поиск

Егор (не проверено) → Пт, 10/01/2010 - 07:36

Спасибо. Буду пробовать поиск Sphinx

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

вопрос по форме

jedi → Ср, 02/09/2011 - 00:15

У меня функция org_form() загружает довольно таки большую таблицу в формы, причем несколько запросов: select, select один ко многим и select многие ко многим (итого пока 2+1 запроса).

а тут еще архитектура Drupal вызывает мою функцию org_form() 3-раза:
1. при генерации формы
2. при сабмите формы
3. при генерации новой формы после редиректа из второго пункта (на самом деле это пункт 1)

, итого 3*3 = 9 запросов. А когда у меня в форма увеличится и будет 20 запросов для формы, то 20 будет умножаться на 3 (благодаря архитектуре drupal) = станет 60запросов (40 запросов лишние).

Может быть я не так инициализирую/загружаю данные для форм, может нельзя брать данные по умолчанию в функцию через org_form()?

Вопрос по Form API c примером

  • ответить
  • quote
  • -17 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
Если вы человек, а не робот, то введите текст с картинки. Если вы робот, то велкам ту майкрософт.ком.

Обо мне

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

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

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

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

  • Пример разработки плагина для модуля CCK
  • AJAX. Обмен данными между клиентом и сервером, закачка на сервер файлов без перезагрузки страницы при помощи библиотеки jQuery.
  • Модуль Vote Up/Down для Drupal 6
  • Темизация Drupal. Часть 1
  • Темизация Drupal. Часть 2. Анатомия темы оформления Drupal
  • Авторизация на Drupal-сайте с помощью аккаунта ВКонтакте
  • Кнопки Home, End и Page Up, Page Down в Mac OS
  • Темизация Drupal. Часть 3. Основы Drupal Forms API и темизация форм
  • Вращение изображений при помощи Javascript
  • Разработка сайта на Drupal. Часть 4. Пример разработки корпоративного интранет-сайта на Drupal

Подписка


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

  • Oz → Швабрашвабр2 → слабовато для
  • loan → Вращение изображений при помощи Javascript → answer this topic
  • CopelandLacey33 → Доставка → reply this post
  • vitsss → Авторизация на Drupal-сайте с помощью аккаунта вКонтакте → hostinh nic.ru and vk api
  • dimasikov → Автоматическая "газетная" верстка (верстка в несколько колонок) → Я похожее делал для с этим
  • max2012 → Разработка сайта на Drupal. Часть 2. Архитектура Drupal. → Подвесные потолки Опосля
  • Антон → Темизация Drupal. Часть 4. Темизация Views → Отлично!
  • Itsmypersonal → Зима 2010. Поездка в Тайланд, Индонезию и Сингапур. Часть 2 — Пхукет → Пхукет - да!
  • Sheldon → Перетаскивание ячеек таблицы. Table drag and drop — плагин для jQuery → Здравствуйте! Подскажите
  • Sheldon → Home sheep home → Одна из тех игр в которые

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

  • Проба пера в HTML5 + canvas. Эффект ластика
  • Шесть рукопожатий
  • Доклад на DrupalConfMoscow 2011
  • Статусы разных сущностей в Друпале 6
  • Футер, прибитый к низу страницы
  • Путешествие по Перу и Боливии. Часть 2
  • Путешествие по Перу и Боливии. Часть 1
  • Несколько панорам из путешествия по Перу и Боливии
  • Авторизация на Drupal-сайте с помощью аккаунта ВКонтакте
  • Home sheep home

Тэги

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

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

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

Навигация

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

Курсы валют

  • 100 Казахских тенге — 20,3352 (+0.03)
  • 10 Украинских гривен — 37,6101 (+0.06)
  • 10 Китайских юаней — 47,9611 (+0.04)
  • 100 Японских иен — 39,6909 (-0.04)
  • 1 Доллар США — 30,2385 (+0.05)
  • 1 Евро — 39,7425 (-0.02)
  • 10000 Белорусских рублей — 35,9554 (-0.07)
  • 1 Турецкая лира — 17,1829 (-0.03)

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

  • Куба, остров Святой Марии.
  • Семинар по хапкидо в Днепропетровске
  • Тестовое письмо из Копенгагена.
  • Вспомнил детство
  • Статья в PC Magazine/RE 11.2009: темизация Drupal
  • Вращение изображений при помощи Javascript
  • Новый год 2008. Часть 3. Гётеборг.
  • Новый год 2008. Часть 5. Осло
  • Лето 2007. Путешествие в Камбоджу – Таиланд – Малайзию. Часть 2. Камбоджа, Сиануквилль.
  • Друпал ограничен только способностями разработчика!

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

На подходе к Красной поляне...
Пеликан
Крым
Без имени
Эль Ничо. На фоне я.
Собака
В Сингапурском зоопарке. Попугай
Экзотическое меню в аэропорту :))
Море
Осло, Карл Юхан Гате
Вид на Мраморную церковь с площади Амалиенборг
Красная поляна
Я на
Эль перро
Пустыня
Дольмен
  • Отдых
  • Работа

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