Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"сборка" всех конфигов в один файл #148

Open
kerbylav opened this issue Jun 16, 2015 · 3 comments
Open

"сборка" всех конфигов в один файл #148

kerbylav opened this issue Jun 16, 2015 · 3 comments

Comments

@kerbylav
Copy link

На продакшене было бы очень неплохо заиметь возможность единоразовой сборки всех конфигов в один файл, чтобы при открытии каждой страницы не открывать кучу файлов конфигов от каждого плагина. Пусть проверка на их изменение и делается на уровне самого PHP но когда на сайтах бывает по 20-30 плагинов все эти телодвижения все равно лишние, плюс можно собирать ФИНАЛЬНУЮ версию конфига, т.е. со всеми изменениями при наследовании и всем таком - т.е. убрать из загрузки КАЖДОЙ страницы эту работу. Привязать пересборку, скажем, к глобальной очистке кэша или отдельным пунктом админки.

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

@mzhelskiy
Copy link
Contributor

У тебя есть под рукой сайт с 20-30 плагинами? Можешь замерить сколько времени уходит загрузку конфигов плагинов?

@kerbylav
Copy link
Author

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

@psnet
Copy link

psnet commented Jun 16, 2015

сайт с 20-30 плагинами? Можешь замерить сколько времени уходит загрузку конфигов плагинов?

  • Загрузка главной страницы, лс 1.0.3, измерялось локально, в попугаях
Количество плагинов Время загрузки конфигов, сек
72 0.13442087173462
10 0.037338972091675
0 0.00036406517028809

Как видим, разница между 0 плагинов и 10 штук - составляет 100 раз, а разница между 72 и 10 плагинами - 4 раза, можно сказать следующее: если начали ставить плагины, то почти без разницы количество. Конечно плагин плагину рознь, но можно задуматься.

Виноватец торжества:

$a = microtime(true);
/**
 * Загружает конфиги плагинов вида /plugins/[plugin_name]/config/*.php
 * и include-файлы /plugins/[plugin_name]/include/*.php
 */
$sPluginsDir = Config::Get('path.root.server').'/plugins';
$sPluginsListFile = $sPluginsDir.'/'.Config::Get('sys.plugins.activation_file');
if($aPluginsList=@file($sPluginsListFile)) {
    $aPluginsList=array_map('trim',$aPluginsList);
    foreach ($aPluginsList as $sPlugin) {
        $aConfigFiles = glob($sPluginsDir.'/'.$sPlugin.'/config/*.php');
        if($aConfigFiles and count($aConfigFiles)>0) {
            foreach ($aConfigFiles as $sPath) {
                $aConfig = $fGetConfig($sPath);
                if(!empty($aConfig) && is_array($aConfig)) {
                    // Если конфиг этого плагина пуст, то загружаем массив целиком
                    $sKey = "plugin.$sPlugin";
                    if(!Config::isExist($sKey)) {
                        Config::Set($sKey,$aConfig);
                    } else {
                        // Если уже существую привязанные к плагину ключи,
                        // то сливаем старые и новое значения ассоциативно
                        Config::Set(
                            $sKey,
                            func_array_merge_assoc(Config::Get($sKey), $aConfig) 
                        );
                    }
                }
            }
        }
        /**
         * Подключаем include-файлы
         */
        $aIncludeFiles = glob($sPluginsDir.'/'.$sPlugin.'/include/*.php');
        if($aIncludeFiles and count($aIncludeFiles)) {
            foreach ($aIncludeFiles as $sPath) {
                require_once($sPath);
            }       
        }
    }
}
$b = microtime(true);
die($b - $a);

Идея хорошая, но дело в том, что, например, у смарти десятки плагинов есть в поставке и они все загружаются при старте, а пользуемся мы только одним десятком. Можно удалить часть.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants