Pergunta

Pergunta muito simples desta vez, basicamente eu tenho um grupo de pastas e alguns deles contêm arquivos que eu gostaria de automaticamente sempre que eu execute o script de meus sites.No entanto, não quero ter que especificar quais arquivos para o AutoLoad, porque eu quero que o processo seja dinâmico e eu quero ser capaz de criar e excluir arquivos diferentes na mosca. Portanto, é claro que a solução mais fácil é obter uma lista de pastas nos diretórios e construir os caminhos para os arquivos de carga automática, se os arquivos existirem, o script inclui-los. Mas, minha pergunta é quanto isso afetará o desempenho do meu roteiro?É realmente uma estrutura que eu quero liberar mais tarde, então o desempenho é bastante o problema. Alguma idéia?

Foi útil?

Solução

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.

Outras dicas

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top