460 likes | 546 Views
Easy authcache 2 - кеширование для Pro. Игорь Родионов. Drupal expert rodionov.ig@gmail.com. Родионов Игорь. Cooking Drupal ~ 5 years ~ 14 projects ~ 60 patches ~16 approved. Drupal. Drupal. Преждевременная оптимизация. Drupal. Кеширование. Кеширование. Кеширование. Кеширование.
E N D
Easy authcache 2 - кеширование для Pro Игорь Родионов Drupal expert rodionov.ig@gmail.com
Родионов Игорь Cooking Drupal ~ 5 years ~ 14 projects ~ 60 patches ~16 approved
Кеширование • Система разделения контента • Система доставки “динамического” контента • Кеширующий прокси
Система разделения контента /** * Implements hook_easy_authcache_register() */ function easy_authcache_block_easy_authcache_register() { $items[] = array( 'theme' => 'block', 'mock callback' => 'easy_authcache_block_dynamic_args', 'callback' => 'easy_authcache_block_callback' ); return $items; }
Система разделения контента function easy_authcache_block_dynamic_args(&$vars) { $module = $vars['block']->module; $delta = $vars['block']->module; $conf = _easy_authcache_block_settings($module, $delta); if ($conf['is_dynamic']) { $block_id = _easy_authcache_block_id($module, $delta); $params = array('region' => $vars['block']->region, 'block_id' => $block_id); return array('id' => $block_id, 'params' => $params); } return null; }
Система разделения контента /** * Implements hook_easy_authcache_register() */ function easy_authcache_block_easy_authcache_register() { $items[] = array( 'theme' => 'block', 'mock callback' => 'easy_authcache_block_dynamic_args', 'callback' => 'easy_authcache_block_callback' ); return $items; }
Система разделения контента function easy_authcache_block_callback($data) { if (empty($data)) { return ''; } $block_id = $data['block_id']; ......... COPY PASTE FROM DRUPAL CORE BLOCK MODULE.......... // Process each block $block->region = $data['region']; ......... COPY PASTE FROM DRUPAL CORE BLOCK MODULE.......... $output = theme('block', $block); return $output; }
Система разделения контента /** * Implements hook_easy_authcache_register() */ function easy_authcache_block_easy_authcache_register() { $items[] = array( 'theme' => 'block', 'mock callback' => 'easy_authcache_block_dynamic_args', 'callback' => 'easy_authcache_block_callback' ); return $items; }
Система доставки контента • ESI – Edge side includes • CDN (Akamai) • Caching proxy (Varnish,Squid,Mongrel) • SSI – Server side includes • Web server (Apache, nginx, lighttpd, IIS) • Ajax – Client side include • Web browsers with JavaScript support
Клуб анонимных друпалеров “А можем мы обновить ядро?”
Клуб анонимных друпалеров Возми проект под контроль!
Непрерывная интеграция • Избавится от рутины • Регрессионное тестирование • Быстрая обратная связь • Уверенность в проекте • Часты релизы
Инспекция – Copy - Paste PHPCPD pear install phpunit/phpcpd
Инспекция - Mess phplint icosaedro.it/phplint
Инспекция - Mess PHPMD phpmd.org ______________________________ Code Size Rules Design Rules Naming Rules Unused Code Rules
Инспекция – Code Style Code Sniffer pear install PHP_CodeSniffer Drupal Code Sniffer drupal.org/project/drupalcs
Тестирование Selenium + Unit testing framework + Functional тестирование - Unit тестирование + Поддержка Java Script - Доступ к API Drupal - Атомарность тестов - Хрупкость тестов - Запуск тестов паралельно - Производительность тестов
Тестирование Simpletest/Simpletest clone + Functional тестирование + Unit тестирование - Поддержка Java Script + Доступ к API Drupal +Атомарность тестов +Хрупкость тестов +Запуск тестов паралельно +Производительность тестов
Тестирование Simpletest/Simpletest clone/Selenium + Functional тестирование + Unit тестирование + Поддержка Java Script + Доступ к API Drupal +Атомарность тестов +Хрупкость тестов +Запуск тестов паралельно +Производительность тестов
Сборка • Contribute • Custom • Forked
Сборка • Contribute • Custom • Forked Patches
Сборка Drush make projects[admin_menu][version] = "3.0-rc1" projects[admin_menu][subdir] = "contrib/dev" projects[admin_menu][patch][] = "patches/admin_menu_font.patch"
Непрерывная интеграция • Избавится от рутины • Регрессионное тестирование • Быстрая обратная связь • Уверенность в проекте • Часты релизы
Сборка • Drush make • Корпоративные репозитории модулей • Хакайте ядро и модули • Возвращайте патчи в сообщество
Сборка Не храните
Сборка - phing • $ phing make • $ phing install • $ phing update • $ phing test • $ phing inspect • $ phing create • $ phing phpcs etc ...
Итого • Контроль над проектом • Уменьшили время релиза • Уменьшили риски • Накопление “технического опыта” • Гибкость интеграции стороннего кода • 75% разработчиков счастливы
Спасибо - друзьям Родионову Алексею Мироненко Максиму Тищенко Максиму Королькову Александру
Спасибо за вниманиеВопросы? Игорь Родионов Drupal expert rodionov.ig@gmail.com