Производительность. Много ли съест ресурсов динамическая функция подгрузки файлов? Целесообразно ли использовать динамическую подгрузку файлов.
Есть небольшой класс, который реализует функцию 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
243 +1
0
Ответы
1

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

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

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

20 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир