Производительность. Много ли съест ресурсов динамическая функция подгрузки файлов? Целесообразно ли использовать динамическую подгрузку файлов.
Есть небольшой класс, который реализует функцию autolod, в дальнейшем хочу так же подгружать любой необходимый файл. Как подгружаю: сначала функция принимает путь корня сайта, потом рекурсивно строит массив с путями всех директорий, а потом пробегает его форичем, проверяет существует ли запрошенный файл и если да, то подключает его, причем форич не прерывается до тех пор пока не пройдет все пути.
Код:class Loader{
const DS = DIRECTORY_SEPARATOR;
private static $path;
private static $namespaces = false;
private static $root;
private static $dirlist=[];
public static function setRoot($root){
static::$root=$root;
}
public static function searchDir($root){
$scan = scandir($root);
foreach($scan as $dir){
if(is_dir($root.self::DS.$dir) and $dir != '.' and $dir !='..'){
static::$dirlist[]=$root.self::DS.$dir;
static::searchDir($root.self::DS.$dir);
}
}
}
public static function setAutoload($autoload=[self,'autoload']){
spl_autoload_register($autoload);
}
public static function autoload($class){
$class = explode('\\',strtolower($class));
$name = array_pop($class);
if(!empty($class)){
static::$path = static::$root.self::DS.implode(self::DS,$class).self::DS.$name.'.php';
static::$namespaces=true;
require_once(static::$path);
}
else{
static::$namespaces=false;
!empty(static::$dirlist)?:static::searchDir(static::$root);
foreach(static::$dirlist as $dir){
if(file_exists($dir.self::DS.$name.'.php')){
require_once($dir.self::DS.$name.'.php');
}
}
static::$path = static::$root.self::DS.$name.'.php';
}
}
}
По поводу лишних телодвижений с установкой флага $namespaces - сначала хотел разбить код на функции, но пока не знаю целесообразен ли он вообще, не хочу этого делать.

21 Авг 2019 в 07:06
204 +1
0
Ответы
1

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

Также, использование динамической подгрузки файлов может сделать код менее понятным и усложнить отладку. Если у вас нет конкретной необходимости в динамической подгрузке файлов, то лучше использовать стандартные способы загрузки классов, например, автозагрузчик Composer.

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

20 Апр в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 89 837 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир