SlideShare a Scribd company logo
Повышаем
производительность
   Drupal-сайта




    Колос Владимир Анатольевич
Проблемы
производительности
Страница долго грузится:
   Нет должного кэширования данных
   Используются не оптимальные алгоритмы
   Выполняется куча непонятных SQL-запросов
   Долго загружаются модули
   Страницу долго отдаёт Web-сервер

Последствия:
   Сервер загружен на полную
   Посетитель закрыл вкладку с Вашим сайтом
   Ваш хостер отказал Вам в размещении сайта
Готовые решения


Список модулей:
  Boost
  Cache Router
  Authcache
  Block Cache Alter
  Path Cache
  Javascript Aggregator
  CSS Gzip
Готовые решения > Boost

Аудитория………..: анонимные пользователи
Цель……………….: кэширование страниц
Эффективность…: очень высокая
Возможности…….:
   Хранилище кэша: File
   Отдача закэшированной страницы происходит без участия
   PHP и MySQL
   Настраиваемое время жизни для каждой страницы
   Сжатие CSS и JavaScript
   Поддержка мультисайтов
   Модуль работает даже на недорогом хостинге
Готовые решения > Cache
Router
Аудитория………..: все
Цель………………: изменение хранилища по-умолчанию
Эффективность…: очень высокая
Возможности…….:
   Хранилище кэша: APC, XCache, eAccelerator, Memcache, File,
   Database
   Для разных таблиц кэша можно использовать различные
   хранилища
   Поддержка мультисайтов
Готовые решения > Authcache

Аудитория………..: все
Цель……………….: кэширование страниц
Эффективность…: очень высокая
Возможности…….:
   Хранилище кэша: любое из поддерживаемых модулей
   CacheRouter
   Кэширование настраивается по ролям пользователей
   Список исключений страниц из кэширования
   Загрузка динамических блоков на страницу происходит через
   Ajax
Готовые решения > Block Cache
Alter
Аудитория………..: все
Цель………………: кэширование блоков
Эффективность…: умеренная
Возможности…….:
   Настройки кэша: кэш отключён, глобальное кэширование,
   кэширование для страницы, кэширование для роли,
   кэширование для пользователя
   Синхронизация обновления кэша с: обновлением страницы,
   обновлением ноды, обновлением комментария, регистрацией
   нового пользователя, входом или выходом пользователя
   Время жизни кэша
Готовые решения > Path Cache

Аудитория………..: все
Цель……………….: кэширование преобразований пути
Эффективность…: умеренная
Возможности…….:
   Кэширование преобразований алиаса в системный путь
Готовые решения > Javascript
Aggregator
Аудитория………..: все
Цель……………….: сжатие JavaScript файлов
Эффективность…: умеренная
Возможности…….:
   Агрегация всех JavaScript файлов в один
   Минимизация JavaScript файла (Minify)
   Сжатие JavaScript файла используя GZip
Готовые решения > CSS Gzip

Аудитория………..: все
Цель……………….: сжатие CSS файлов
Эффективность…: умеренная
Возможности…….:
   Агрегация всех CSS файлов в один
   Сжатие CSS файла используя GZip
Советы при создании собственных
модулей
 Используйте Drupal Cache API
 Используйте статическое кэширование внутри собственных
 функций
 В функцию node_load передавайте только ID ноды в качестве
 первого аргумента
 Не используйте стиль отображения “Материал” в Views
 Используйте свою собственную функцию для получения
 значения одного или нескольких CCK-полей вместо загрузки
 всей ноды используя node_load()
 При массовой загрузке синонимов и связанных терминов
 таксономии используйте свою собственную функцию
Советы при создании собственных
модулей > Примеры

Drupal Cache API

Получение данных из кэша
cache_get($sid, $table = ‘cache’)

Добавление данных в кэш
cache_set($sid, $data, $table = ‘cache’, $expire = 0, $headers = null)

Очистка кэша
cache_clear_all($cid = NULL, $table = NULL, $wildcard = FALSE)
Советы при создании собственных
модулей > Примеры

Статическое кэширование внутри функций

function taxonomy_get_term($tid, $reset = FALSE) {
   static $terms = array();
   if ($reset) {
       $terms = array();
   }
   if (!isset($terms[$tid])) {
       // находим нужный термин используя SQL запрос
   }
   return $terms[$tid];
}
Советы при создании собственных
модулей > Примеры

В node_load передавайте только ID ноды

Статическое кэширование в функции работает
node_load(1);

Статическое кэширование в функции не работает
node_load(array(‘nid’ => 1));
node_load(array(‘nid’ => 1, ‘type’ => ‘page’));
Советы при создании собственных
модулей > Примеры

Массовая работа с терминами таксономии

Собственная функция выполнится быстрей с одним SQL запросом
$tids = array(1, 2, 3, 4, 5, …);
get_terms_relations($tids);

Чем цикл с родной функцией модуля taxonomy
$tids = array(1, 2, 3, 4, 5, …);
foreach ($tids as &$tid) {
    $tid = taxonomy_get_related($tid);
}
Спасибо за внимание

Ссылки
  Boost http://drupal.org/project/boost
  Cache Router http://drupal.org/project/cacherouter
  Authcache http://drupal.org/project/authcache
  Block Cache Alter http://drupal.org/project/blockcache_alter
  Path Cache http://drupal.org/project/pathcache
  Javascript Aggregator http://drupal.org/project/javascript_aggregator
  CSS Gzip http://drupal.org/project/css_gzip
  Полный список http://groups.drupal.org/node/21897

More Related Content

PPT
HSE{Consult}: DevOps – новая методология разработки
PPTX
Drupal 8 API для разработчиков
PPT
использование Hibernate java persistence.part 4.
PPTX
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
PPTX
Анализируем данные с Clickhouse
PPT
Webuibasics - Lesson 3 - Nginx, SSI (in russian)
PPT
Client optimization drupal
PPT
Кэширование в Веб разработке на серверном и клиентском уровнях
HSE{Consult}: DevOps – новая методология разработки
Drupal 8 API для разработчиков
использование Hibernate java persistence.part 4.
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Анализируем данные с Clickhouse
Webuibasics - Lesson 3 - Nginx, SSI (in russian)
Client optimization drupal
Кэширование в Веб разработке на серверном и клиентском уровнях

What's hot (20)

PPTX
Что нового в ASP.NET 4
PPTX
ClickHouse как решение для бизнес аналитики. Дмитрий Кузьмин
PDF
Web лекция 3 Web серверы
PDF
Introduction in Node.js (in russian)
PDF
Курсы по мобильной разработке под iOS. 5 лекция. Работа с данными
PDF
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
PDF
Speed Up Your Website
PPT
Drupal 7 and History.js
PDF
«Композитный сайт. Ускорение отдачи сайта в 100 раз»
PDF
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
PPT
Drupal 7 и history.js или как ajax инфицировать сайт
PPTX
Mysql vs postgresql
PDF
Ускоряем Wordpress: кеширование, CDN, Varnish Cache
PDF
09 - Web-технологии. MVC фреймворки
PPT
Cookies, session и другое в JSP
PDF
Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)
PDF
Scaling services with apache mesos (and docker)
PDF
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
Что нового в ASP.NET 4
ClickHouse как решение для бизнес аналитики. Дмитрий Кузьмин
Web лекция 3 Web серверы
Introduction in Node.js (in russian)
Курсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Speed Up Your Website
Drupal 7 and History.js
«Композитный сайт. Ускорение отдачи сайта в 100 раз»
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Drupal 7 и history.js или как ajax инфицировать сайт
Mysql vs postgresql
Ускоряем Wordpress: кеширование, CDN, Varnish Cache
09 - Web-технологии. MVC фреймворки
Cookies, session и другое в JSP
Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)
Scaling services with apache mesos (and docker)
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
Ad

Similar to Повышаем производительность Drupal-сайта (20)

PPTX
Александр Шуменко - Varnish for authenticated users
PPT
CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить ...
PDF
The Old New ASP.NET
PPTX
Построение высоконагруженных приложений на базе Windows Azure
PPTX
Построение высоконагруженных приложений на базе Windows Azure
ODP
Ice Php Framework Preview Release
PPTX
Node.js введение в технологию, КПИ #ITmeetingKPI
PDF
Работа со статикой в Django
PDF
Расширенное кеширование в Doctrine2
PDF
Расширенное кеширование Doctrine2 (Ильяс Салихов, Intaro)
PPT
Easy authcache 2 кеширование для pro родионов игорь
PDF
Cache2012 administrationbasics
PPT
Easy authcache 2 кэширование для pro. Родионов Игорь
PDF
WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
PPTX
Кузьмін Віталій “Оптимізація і конфігурування Magento для високонавантажених ...
PPTX
How to optimize Magento
PDF
MODX 3: Что нового?
PPT
оптимизация скорости загрузки страницы
PDF
basis.js - почему я не бросил разрабатывать свой фреймворк
ODP
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
Александр Шуменко - Varnish for authenticated users
CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить ...
The Old New ASP.NET
Построение высоконагруженных приложений на базе Windows Azure
Построение высоконагруженных приложений на базе Windows Azure
Ice Php Framework Preview Release
Node.js введение в технологию, КПИ #ITmeetingKPI
Работа со статикой в Django
Расширенное кеширование в Doctrine2
Расширенное кеширование Doctrine2 (Ильяс Салихов, Intaro)
Easy authcache 2 кеширование для pro родионов игорь
Cache2012 administrationbasics
Easy authcache 2 кэширование для pro. Родионов Игорь
WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
Кузьмін Віталій “Оптимізація і конфігурування Magento для високонавантажених ...
How to optimize Magento
MODX 3: Что нового?
оптимизация скорости загрузки страницы
basis.js - почему я не бросил разрабатывать свой фреймворк
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
Ad

Повышаем производительность Drupal-сайта

  • 1. Повышаем производительность Drupal-сайта Колос Владимир Анатольевич
  • 2. Проблемы производительности Страница долго грузится: Нет должного кэширования данных Используются не оптимальные алгоритмы Выполняется куча непонятных SQL-запросов Долго загружаются модули Страницу долго отдаёт Web-сервер Последствия: Сервер загружен на полную Посетитель закрыл вкладку с Вашим сайтом Ваш хостер отказал Вам в размещении сайта
  • 3. Готовые решения Список модулей: Boost Cache Router Authcache Block Cache Alter Path Cache Javascript Aggregator CSS Gzip
  • 4. Готовые решения > Boost Аудитория………..: анонимные пользователи Цель……………….: кэширование страниц Эффективность…: очень высокая Возможности…….: Хранилище кэша: File Отдача закэшированной страницы происходит без участия PHP и MySQL Настраиваемое время жизни для каждой страницы Сжатие CSS и JavaScript Поддержка мультисайтов Модуль работает даже на недорогом хостинге
  • 5. Готовые решения > Cache Router Аудитория………..: все Цель………………: изменение хранилища по-умолчанию Эффективность…: очень высокая Возможности…….: Хранилище кэша: APC, XCache, eAccelerator, Memcache, File, Database Для разных таблиц кэша можно использовать различные хранилища Поддержка мультисайтов
  • 6. Готовые решения > Authcache Аудитория………..: все Цель……………….: кэширование страниц Эффективность…: очень высокая Возможности…….: Хранилище кэша: любое из поддерживаемых модулей CacheRouter Кэширование настраивается по ролям пользователей Список исключений страниц из кэширования Загрузка динамических блоков на страницу происходит через Ajax
  • 7. Готовые решения > Block Cache Alter Аудитория………..: все Цель………………: кэширование блоков Эффективность…: умеренная Возможности…….: Настройки кэша: кэш отключён, глобальное кэширование, кэширование для страницы, кэширование для роли, кэширование для пользователя Синхронизация обновления кэша с: обновлением страницы, обновлением ноды, обновлением комментария, регистрацией нового пользователя, входом или выходом пользователя Время жизни кэша
  • 8. Готовые решения > Path Cache Аудитория………..: все Цель……………….: кэширование преобразований пути Эффективность…: умеренная Возможности…….: Кэширование преобразований алиаса в системный путь
  • 9. Готовые решения > Javascript Aggregator Аудитория………..: все Цель……………….: сжатие JavaScript файлов Эффективность…: умеренная Возможности…….: Агрегация всех JavaScript файлов в один Минимизация JavaScript файла (Minify) Сжатие JavaScript файла используя GZip
  • 10. Готовые решения > CSS Gzip Аудитория………..: все Цель……………….: сжатие CSS файлов Эффективность…: умеренная Возможности…….: Агрегация всех CSS файлов в один Сжатие CSS файла используя GZip
  • 11. Советы при создании собственных модулей Используйте Drupal Cache API Используйте статическое кэширование внутри собственных функций В функцию node_load передавайте только ID ноды в качестве первого аргумента Не используйте стиль отображения “Материал” в Views Используйте свою собственную функцию для получения значения одного или нескольких CCK-полей вместо загрузки всей ноды используя node_load() При массовой загрузке синонимов и связанных терминов таксономии используйте свою собственную функцию
  • 12. Советы при создании собственных модулей > Примеры Drupal Cache API Получение данных из кэша cache_get($sid, $table = ‘cache’) Добавление данных в кэш cache_set($sid, $data, $table = ‘cache’, $expire = 0, $headers = null) Очистка кэша cache_clear_all($cid = NULL, $table = NULL, $wildcard = FALSE)
  • 13. Советы при создании собственных модулей > Примеры Статическое кэширование внутри функций function taxonomy_get_term($tid, $reset = FALSE) { static $terms = array(); if ($reset) { $terms = array(); } if (!isset($terms[$tid])) { // находим нужный термин используя SQL запрос } return $terms[$tid]; }
  • 14. Советы при создании собственных модулей > Примеры В node_load передавайте только ID ноды Статическое кэширование в функции работает node_load(1); Статическое кэширование в функции не работает node_load(array(‘nid’ => 1)); node_load(array(‘nid’ => 1, ‘type’ => ‘page’));
  • 15. Советы при создании собственных модулей > Примеры Массовая работа с терминами таксономии Собственная функция выполнится быстрей с одним SQL запросом $tids = array(1, 2, 3, 4, 5, …); get_terms_relations($tids); Чем цикл с родной функцией модуля taxonomy $tids = array(1, 2, 3, 4, 5, …); foreach ($tids as &$tid) { $tid = taxonomy_get_related($tid); }
  • 16. Спасибо за внимание Ссылки Boost http://drupal.org/project/boost Cache Router http://drupal.org/project/cacherouter Authcache http://drupal.org/project/authcache Block Cache Alter http://drupal.org/project/blockcache_alter Path Cache http://drupal.org/project/pathcache Javascript Aggregator http://drupal.org/project/javascript_aggregator CSS Gzip http://drupal.org/project/css_gzip Полный список http://groups.drupal.org/node/21897