Рейтинг
+1.14
Разработка под LiveStreet CMS

Разработка под LiveStreet CMS

Подробнее ↓

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

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

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

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

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

Список хуков LiveStreet CMS 1.0.1

Разработка под LiveStreet CMS
Привожу список стандартных хуков для чистой официальной ЛС 1.0.1, большинство из них неявно прописаны в движке, поэтому попытка найти их вызовы в коде у вас не выйдет т.к. часть из них автоматически формируется ядром движка.

Из стандартной поставки ЛС хуки в сумме вызываются 486 раз, некоторые по нескольку раз. Это нормально. Здесь приведены 161 хук, которые доступны в ЛС 1.0.1, в порядке их вызова, начиная с самого первого, исключая дальнейшие повторения.

Список хуков LiveStreet CMS 1.0.1 →

Самое узкое место в ЛС - увеличение производительности

Разработка под LiveStreet CMS
Ища пути ускорения движка я постоянно спотыкаюсь об класс конфига (/engine/lib/internal/ConfigSimple/Config.class.php), а именно — меня беспокоит авто замена ключей в конфиге. Такой код мы можем найти в дистрибутиве:

static public function KeyReplace($cfg,$sInstance=self::DEFAULT_CONFIG_INSTANCE) {
  if(is_array($cfg)) {
    foreach($cfg as $k=>$v) {
      $k_replaced = self::KeyReplace($k, $sInstance);
      if($k==$k_replaced) {
        $cfg[$k] = self::KeyReplace($v,$sInstance);
      } else {
        $cfg[$k_replaced] = self::KeyReplace($v,$sInstance);
        unset($cfg[$k]);
      }
    }
  } else {
    if(preg_match('~___([\S|\.|]+)___~Ui',$cfg))
      $cfg = preg_replace_callback(
        '~___([\S|\.]+)___~Ui',
        create_function('$value','return Config::Get($value[1],"'.$sInstance.'");'),
        $cfg
      );
  }
  return $cfg;
}


Самое узкое место в ЛС - увеличение производительности →

API плагина Configengine

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

Часто при разработках плагинов есть необходимость сохранить в базе некоторое количество простой информации и приходится каждый раз писать стандартную обвязку в виде модуля, сущности и маппера (и про кэш ещё не забыть) — это отвлекает от бизнес логики и требует времени на написание кода для хранения этой несложной информации.

API плагина Configengine →

Кеширование данных, полученных с БД

Разработка под LiveStreet CMS
кеширование в livestreetВ ЛС встроен механизм кеширования информации, полученной из БД и этот топик призван пролить луч света на использование кеширования в ЛС в плагинах, т.к. это довольно просто.

В вашем плагине важно определить точки, где вы получаете данные и где их записываете/модифицируете (обычно это происходит в маппере). Кеширование должно работать по логике: пока данные в БД не менялись — возвратить их с кеша, а не запросами из БД, которая и так постоянно нагружена.

Кеширование данных, полученных с БД →

Хуки в JavaScript для вызова произвольного кода

Разработка под LiveStreet CMS
В данной статье я расскажу вам о том, как можно наследовать и дополнять JavaScript код в движке ЛС.

Вступление


Механизм делегирования кода JS в ЛС можно осуществлять такими наиболее часто употребляемыми методами в зависимости от поставленной задачи:

  1. Переопределить всю функцию (атата!)
    В своем коде просто переопределить весь метод:
    
    ls.MODULE.METHOD = function (param1, param2) { /* party hard */ }
    

    Желательно не использовать данный подход, он показан для примера.
  2. Механизм хуков
  3. Механизм маркеров

Рассмотрим кратко каждый из приемов.

Хуки в JavaScript для вызова произвольного кода →