0

抱歉标题不详,不知道给这个标题取什么:-)

我编写了一个 API,它从我的服务器上的目录加载所需的 javascript 库。目录具有特定的格式,唯一不同的是每个库目录中的文件名格式。

目录格式

_js/_source/_library_name_here/file_name_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'
);

潜在的替代品

$js_libraries如果数组是通过扫描“_source”目录并像这样填充数组而自动构建的,那么这个 API 将会更加动态。我会这样做(未经测试,只是一个例子!)

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 类或组合其他RecursiveDirectoryIteratorFilterIteratorRecursiveIteratorIterator的自定义子类来获取可以使用foreach并返回所需的对象文件,一次一个。

于 2012-10-24T21:41:45.923 回答