Насколько получение списка каталогов влияет на производительность php - PullRequest
1 голос
/ 18 февраля 2011

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

Ответы [ 4 ]

4 голосов
/ 18 февраля 2011

Вы должны просто разрешить PHP автоматически загружать свои классы .

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

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

См. Преждевременная оптимизация .

1 голос
/ 18 февраля 2011

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

Если это вариант, кэширование этого списка может помочь.

0 голосов
/ 18 февраля 2011

Это зависит.

Попробуйте свой подход и измерьте. Вы всегда можете добавить кеширование позже. Или прибегнуть к автозагрузке .

0 голосов
/ 18 февраля 2011

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

Вот мой автозагрузчик:

spl_autoload_register(
    function ($className) {
        $possibilities = array(
            APPLICATION_PATH.'beans'.DIRECTORY_SEPARATOR.$className.'.php',
            APPLICATION_PATH.'controllers'.DIRECTORY_SEPARATOR.$className.'.php',
            APPLICATION_PATH.'helpers'.DIRECTORY_SEPARATOR.$className.'.php',
            APPLICATION_PATH.'models'.DIRECTORY_SEPARATOR.$className.'.php',
            APPLICATION_PATH.'views'.DIRECTORY_SEPARATOR.$className.'.php'
        );
        foreach (explode(PATH_SEPARATOR, ini_get('include_path')) as $k => $v) {
            $possibilities[] = $v.DIRECTORY_SEPARATOR.$className.'.php';
        }
        foreach ($possibilities as $file) {
            if (file_exists($file)) {
                require_once($file);
                return true;
            }
        }
        return false;
    }
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...