Оптимизация ЛС, часть 2

Разработка под LiveStreet CMS
Продолжаем эксперименты над движком.

Ахтунг! В данной статье будут приведены примеры кода, которые могут нарушить функциональность некоторых весьма хитро-умных плагинов, которые привязаны к этому механизму. Мне не известен ни один такой плагин, но я не исключаю возможность их существования.

В прошлом топике, где я опубликовал полный список стандартных хуков для ЛС 1.0.1, я обратил внимание на хуки, которые начинаются с префикса module_ — хуки, которые постоянно создаются динамически и вызываются парами до и после вызовов методом модулей. Как и было написано в предыдущем топике — хуки вызываются 486 раз, причем само их количество на «чистой» LiveStreet значится в 161 штуку.

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

  1. Ставим чистую стандартную ЛС и отключаем некоторые параметры (модуль ЛС, кеш и т.п.), которые могут повлиять на значения в большей степени нежели нагрузка на процессор фоновыми приложениями.
  2. Выключаем все плагины.
  3. В файл шаблона statistics_performance.tpl в конец добавим строки:
    
    <br />
    memory peak usage: {round(memory_get_peak_usage()/1024,1)} KB
    <br />
    memory usage: {round(memory_get_usage()/1024,1)} KB
        

для вывода количества использованной памяти движком.

Базовые приготовления закончены.

Методика проверки

Проверка времени инициализации модулей, общего времени выполнения и количества использованной памяти. Просто будем обновлять главную страницу и найдем средние значения. Все результаты проведем 5 раз.

1. Стандартная поставка ЛС
Замеряем параметры ЛС из «коробки».

Время инициализации модулей ЛС: 0.1436 сек.
Полное время выполнения: 0.4542 сек.
Пиковое потребление памяти: 10337 Кб
Использование памяти: 10184.8 Кб

2. Отключение вызова хуков в ядре ЛС

Производим редактированием ядра:
Открываем Engine.class.php и закомментируем следующие строки:
#318

$this->Hook_Run($sHookPrefix.'before');

#323

$this->Hook_Run($sHookPrefix.'after');

#539

$aResultHook=$this->_CallModule('Hook_Run',array('module_'.$sModuleName.'_'.strtolower($sMethod).'_before',&$aArgs));

#555

$this->Hook_Run('module_'.$sModuleName.'_'.strtolower($sMethod).'_after',array('result'=>&$result,'params'=>$aArgs));


Время инициализации модулей ЛС: 0.1368 сек.
Полное время выполнения: 0.4038 сек.
Пиковое потребление памяти: 10333.4 Кб
Использование памяти: 10181.2 Кб

Итоги тестирования
На чистом движке данная оптимизация почти не сказывается, т.к. с применением данной технологии:

  • Время инициализации модулей уменьшилось на 0,0068 сек. (4,73%),
  • Полное время выполнения уменьшилось на 0,0504 сек (11%).
  • Потребление памяти уменьшилось на 3,6 кб

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

P.S. Такие же вызовы, но только для екшенов есть в классе Action.class.php в 169 и 171 строках и в роутере Router.class.php в 265, 267, 281 и 283 строках. Если и их отключить, то можно ожидать ещё более значительный прирост по скорости. Приведу лишь результаты времени выполнения такой доп. модификации (память практически не уменьшается):

  • Время инициализации модулей ЛС: 0.131 сек.
  • Полное время выполнения: 0.379 сек.

В результате имеем общий прирост по скорости на 0,0752 сек что составляет уменьшение времени загрузки сайта на 16,6%. Конечно, данное решение нельзя назвать универсальным, т.к. оно урезает часть возможностей для разработчиков, но для тех, кто использует ЛС как фреймворк, этот топик является таблеткой для увеличения производительности.

Всем спасибо за внимание. Регистрируйтесь и подписывайтесь на обновления блога.

P.S. Все вышеприведенные модификации наведены для официальной LiveStreet CMS 1.0.1.
4 комментария
zhanatbek
для LS 102 канает?
Serge Pustovit
в чем именно заключается вопрос?
zhanatbek
Все вышеприведенные модификации наведены для официальной LiveStreet CMS 1.0.1.
а для 102 можно применить?
Serge Pustovit
не знаю. не проверял.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.