0

わかりにくいタイトルで申し訳ありませんが、これにタイトルを付けるかどうかはわかりませんでした:-)

サーバー上のディレクトリから必要な JavaScript ライブラリをロードする API を作成しました。ディレクトリには特定の形式があります。唯一異なるのは、各ライブラリのディレクトリ内のファイル名の形式です。

ディレクトリ形式

_js/_source/_library_name_here/ファイル名_here.js

例えば

/_js/_source/_fancybox/jQuery.lightbox-0.5.js

配列 (現在はハードコードされています)

現時点では、次のように個別のライブラリを配列 (ハードコード) に格納しています。

$js_libraries = array(
    'fancybox'       => '/_js/_source/_fancybox/jQuery.lightbox-0.5.js',
    'something_else' => '/_js/_source/_something_else/jQuery.something.js'
);

潜在的な代替案

この API は$js_libraries、「_source」ディレクトリをスキャンしてそのように配列に入力することで配列が自動的に構築された場合、より動的になります。私は(テストされていない、単なる例です!)のようなものでこれを行います:

function gather_files($directory){
    $files_and_folders = scandir($directory);
    foreach($files_and_folders as $value){
        if($value != '.' && $value != '..'){
            if(is_dir($directory.'/'.$value)){
                listFolderFiles($dir.'/'.$ff);
            }
        }
    }
}

$js_libraries = gather_files(dirname(__FILE__));

上記は完了していません。ディレクトリの内容に基づいて配列を自動的に構築することで、私が何を意味するかを実証したかっただけです。

私の質問

簡単に言えば、この API の鍵は速度です。これは、(PHP によってオンザフライで) 圧縮/圧縮された JavaScript ファイルを HTML ページに返すため、ページの開始が遅れるため、遅延が発生することはありません。私が知りたいのは、このディレクトリに多くのライブラリがある場合、自動メソッドが遅くなるということですか? ハードコーディングされた配列に固執する必要がありますか?

4

1 に答える 1

1

常にベンチマーク

実際の速度については、深いファイルシステム階層をリストすることはおそらく他の何よりも IO バウンドですが、を信じたり、自分の直感を信じたりしないでください

最適化に関しては、速度だけが選択肢ではありません。メモリ使用量を少なくして、 GlobIterator クラスを使用するか、他のRecursiveDirectoryIterator 、 FilterIteratorRecursiveIteratorIteratorのカスタム サブクラスを組み合わせて、使用できるオブジェクトを取得し、目的foreachの値を返すことができます。ファイルを一度に 1 つずつ。

于 2012-10-24T21:41:45.923 に答える