Pregunta

Pregunta muy simple Esta vez, básicamente tengo un grupo de carpetas y algunos de ellos contienen archivos que me gustaría cargar automáticamente cada vez que ejecuto mis scripts.Sin embargo, no quiero tener que especificar qué archivos se descargan automáticamente porque quiero que el proceso sea dinámico y quiero poder crear y eliminar archivos diferentes sobre la marcha. Así que, por supuesto, la solución más fácil es obtener una lista de carpetas en los directorios y crear las rutas a los archivos de carga automática, si los archivos existen, entonces el script incluye ellos. Pero, mi pregunta es ¿cuánta voluntad afectará el rendimiento de mi script?En realidad, es un marco que quiero divulgar más tarde, por lo que el desempeño es el problema. ¿Alguna idea?

¿Fue útil?

Solución

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.

Otros consejos

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.

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;
    }
);

It depends.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top