今回は非常に簡単な質問です。基本的に、フォルダーのグループがあり、それらのいくつかには、サイト スクリプトを実行するたびに自動ロードしたいファイルが含まれています。ただし、プロセスを動的にし、さまざまなファイルをその場で作成および削除できるようにするため、自動ロードするファイルを指定する必要はありません。もちろん、最も簡単な解決策は、ディレクトリ内のフォルダーのリストを取得し、自動ロード ファイルへのパスを作成することです。ファイルが存在する場合は、スクリプトにそれらが含まれます。しかし、私の質問は、それがスクリプトのパフォーマンスにどの程度影響するかということです。実際には後でリリースしたいフレームワークなので、パフォーマンスはかなりの問題です。何か案は?
4 に答える
PHPにクラスを自動ロードさせることを検討する必要があります。
それがうまくいかない場合は、ディレクトリ スキャン ソリューションがほとんど残っていることになり、パフォーマンスの低下を気にする必要はありません。機能が必要な場合は、コストを我慢します。
とにかく、PHP のパフォーマンスについて過度に強調するべきではありません。フレームワークが完成したときにそれが問題になる場合は、再検討してください。フレームワークに適切なキャッシング システムを実装することで、現在発生しているパフォーマンスの向上/低下が意味をなさないことに気付く可能性があります。
時期尚早の最適化を参照してください。
これは、ディスク速度、ファイル システム、およびディレクトリのサイズによって異なります。いずれにせよ、ディレクトリを動的にロードしてファイルのリストを取得する必要があると、静的なリストをロードするよりも時間がかかります。どの程度の増加が許容されるかは、要件によって異なります。
それがオプションの場合、そのリストをキャッシュすると役立つ可能性があります。
「無料」ではありませんが、オートローディングは優れています。パフォーマンスへの影響は目立ちません。もちろん、これを測定して、必要に応じてリファクタリングすることもできます。
これが私のオートローダーです:
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;
}
);
場合によります。
アプローチと測定を試してください。キャッシュは後でいつでも追加できます。またはautoloadに頼ります。