Основной курс по Joomla
0 Пользователей и 1 Гость просматривают эту тему.
  • 33 Ответов
  • 11343 Просмотров
*

smart

  • Администратор
  • *******
  • 6846
  • 1297
Re: Плагин OptimizeTables для Joomla 1.6/1.7/2.5
« Ответ #30 : 14.06.2013, 16:59:56 »
Это же получение параметра, а значит и запрос в базу для их чтения. Или $this->params для всех плагинов инициализируются каким-то одним глобальным запросом? Я как-то не копал в эту сторону и не знаю, как там Joomla их подгружает, но мне это кажется нелогичным.
Хы, прикольно. А ты не знал этого? Когда ты взываешь JPluginHelper::importPlugin, выполняется вот такой код:
Код: php
					$className = 'plg' . $plugin->type . $plugin->name;
if (class_exists($className))
{
// Load the plugin from the database.
if (!isset($plugin->params))
{
// Seems like this could just go bye bye completely
$plugin = self::getPlugin($plugin->type, $plugin->name);
}

// Instantiate and register the plugin.
new $className($dispatcher, (array) ($plugin));
}
а в getPlugin, в свою очередь, вызывается метод _import, в котором выборка из базы трех полей folder, element и params.

К слову сказать это одна из самых существенных оптимизаций в Joomla 1.5 - раньше каждый плагин грузил свои параметры раздельно, несмотря на то, что запрос к БД все равно был для получения информации о статусе публикации плагинов. А данная реализация позволила существенно снизить нагрузку на базу. Я удивлен, что ты не в курсе этой истории, мы это много обсуждали.


Либо хранить их в отдельном файле, либо в классе определить как константы: время и период.
Оно раньше в файлах и хранилось, но были проблемы с правами доступа и прочим. Поэтому я придумал эту схему.

В таких случаях наверное лучше писать в близлежащий файл переменную без обращения к базе
Как я писал выше - так оно и было, но были проблемы с правами.

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

b2z

  • Support Team
  • *****
  • 7452
  • 741
  • Разраблю понемногу
Re: Плагин OptimizeTables для Joomla 1.6/1.7/2.5
« Ответ #31 : 14.06.2013, 17:23:29 »
Хмм, не помню, когда об этом говорили ::) А какой цикл жизни у объекта $plugin в нашем случае? Похоже что onAfterInitialise не обнуляет $plugins?
*

Fedor Vlasenko

  • Профи
  • ********
  • 3800
  • 698
  • Все начинается с Value
Re: Плагин OptimizeTables для Joomla 1.6/1.7/2.5
« Ответ #32 : 14.06.2013, 17:25:44 »
Не вижу ничего лучшего чем писать в файл. И какая проблема  с правами закрыли папку, файл от доступа через .htaccess
*

smart

  • Администратор
  • *******
  • 6846
  • 1297
Re: Плагин OptimizeTables для Joomla 1.6/1.7/2.5
« Ответ #33 : 14.06.2013, 18:18:53 »
А какой цикл жизни у объекта $plugin в нашем случае?
Я так понимаю до завершения запроса. Там нет никакой привязки группы плагинов к жизненному циклу, поэтому загрузили группу - данные висят в памяти, кто ж знает, на каком событии тот или иной плагин вызовут? Может быть и на onAfterRender...

Не вижу ничего лучшего чем писать в файл.
Ну ты может быть и не видишь, а если тему не стерли - можно поискать, посчитать, сколько было жалоб, что плагину не хватает прав на запись файла... Я же не просто так переделывал логику. Да  зачем файл, если и так проблем быть не должно?

Вот чем столько времени тратить на обсуждение - давно бы уже посмотрели в коде, почему вызовы идут часто. Скорее всего параметры плагина либо не обновляются, либо они кэшируются, и в этом случае надо после обновления кэш почистить.