質問

非常に簡単な質問今回は、基本的に私はフォルダのグループを持っていて、それらのいくつかは私が私のサイトスクリプトを実行するときはいつでも私がautoloadしたいファイルを含みます。ただし、プロセスを動的にする必要があり、その場で異なるファイルを作成して削除できるため、AutoLoadへのファイルを指定する必要はありません。 そのため、最も簡単な解決策は、ディレクトリ内のフォルダのリストを取得し、ファイルが存在する場合は自動ロードファイルへのパスを構築することです。 しかし、私の質問は私のスクリプトのパフォーマンスにどのくらい影響するでしょうか?その実際に私が後でリリースしたいフレームワークでは、パフォーマンスはかなり問題です。 任意のアイデア?

役に立ちましたか?

解決

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.

他のヒント

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.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top