Какой метод автозагрузки PHP лучше? - PullRequest
0 голосов
/ 06 марта 2011

Будет ли второй метод автозагрузки, который у меня ниже, иметь лучшую производительность?

<?php

// regular __autoload function
function __autoload( $name )
{
     include( $class . '.php' );

}


// SPL autoload
spl_autoload_register("MyClass::Autoloader");
class MyClass
{
    public static function Autoloader($class)
    {
        // list of classes and their location
        $classes = array();
        $classes['spooncookie'] = 'cookie/cookie.php';
        $classes['spoondatabase'] = 'database/database.php';
        $classes['spoondatagrid'] = 'datagrid/datagrid.php';
        $classes['spoondatagridcolumn'] = 'datagrid/column.php';
        $classes['ispoondatagridpaging'] = 'datagrid/paging.php';
        // ....list of all the other class files.......    
        if(isset($classes[$class])){
            include( $classes[$class] );
        }
    }

}

?>

Ответы [ 3 ]

1 голос
/ 06 марта 2011

Если вы не определили свой автозагрузчик (а также основную файловую систему, высовывающую и подталкивающую) как узкое место в производительности, вам действительно не стоит об этом беспокоиться. Профиль, профиль, профиль! Автозагрузчики могут быть настоящим тормозом, но вы, скорее всего, найдете большее повышение производительности в другом месте, фактически сравнив свой код.Честно говоря, я бы выбрал совместимый с PSR-0 автозагрузчик для нового проекта.

1 голос
/ 06 марта 2011

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

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

В качестве примечания вы видели это? http://weierophinney.net/matthew/archives/245-Autoloading-Benchmarks.html

EDIT:

0 голосов
/ 06 марта 2011

Я бы предпочел выбрать метод spl на том основании, что некоторые библиотеки, такие как Smarty, реализуют автозагрузчик spl, поэтому использование метода __autoload может привести к конфликтам.

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

Одна оптимизация, которую я могу предложить, - сделать массив путей статическим. Это должно исключить накладные расходы на создание массива каждый раз, когда вызывается функция (хотя на самом деле такие накладные расходы в любом случае должны быть весьма незначительными)

...