How much does getting a list of directories affect php's performance

270 views Asked by At

Very simple question this time, basically I have a group of folders and some of them contain files that I would like to autoload whenever I run my sites script. However I do not want to have to specify what files to autoload because I want the process to be dynamic and I want to be able to create and delete different files on the fly. So of course the easiest solution is to get a list of folders in the directories and build the paths to the auto load files, if the files exist then the script includes them. But, my question is how much will that affect the performance of my script? Its actually a framework which I want to release later on so performance is quite the issue. Any Ideas?

4

There are 4 answers

0
user229044 On BEST ANSWER

You should consider simply letting PHP autoload your classes.

If that won't work, then you're pretty much left with the directory-scanning solution, and you shouldn't really care about performance penalties. If you want the functionality, you'll put up with the costs.

Generally you shouldn't stress overmuch about performance in PHP anyways. If it becomes an issue when your framework is complete, revisit it. Chances are you'll find whatever performance gains/losses you incur now are rendered moot by implementing a good caching system in your framework.

See Premature Optimization.

0
Jacob On

It depends on your disk speed, file system, and the size of the directory. No matter what, having to dynamically load the directory to get the list of files will take longer than loading a static list; how much of an increase is acceptable depends on your requirements.

If it's an option, caching that list could help.

0
AudioBubble On

Autoloading is great although it's not "free", the performance hit is not noticeable. Of course you can measure this and refactor if needed.

Here's my autoloader:

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;
    }
);
0
Camilo Díaz Repka On

It depends.

Try your approach and measure. You can always add caching later. Or resort to autoload.