【问题标题】:glob() to build array of files, or hardcode array? Speed is key, but automation is niceglob() 构建文件数组还是硬编码数组?速度是关键,但自动化很好
【发布时间】:2012-10-24 20:21:16
【问题描述】:

抱歉标题不详,不知道该取什么标题 :-)

我编写了一个 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 页面,因此不会有任何延迟,因为这会延迟页面的启动。 我想知道的是,当这个目录下有很多库时,自动方法会不会明显变慢?我应该坚持使用硬编码数组吗?

【问题讨论】:

  • 你看过glob()函数吗?
  • 是的,当然,我收集文件的方式不是很相关,事实上我编写的代码很糟糕。我最有可能使用glob() 函数。我只是想知道它是否会明显变慢:-)
  • 只有确定速度的方法,对其进行基准测试。
  • 你为什么不试试看呢?
  • 过早的优化是万恶之源。如果您稍后需要性能提升,请将您从glob() 获得的数组转储到文件并从那里读取。

标签: php arrays api directory scandir


【解决方案1】:

始终进行基准测试

对于实际速度,列出深层文件系统层次结构可能比其他任何东西都更受 IO 限制,但请不要相信我,或者不要相信你自己的直觉, 总是基准测试。

至于优化:速度不是唯一的选择,您可以选择low memory usage, 并使用GlobIterator class 或结合其他RecursiveDirectoryIteratorFilterIterator 的自定义子类和RecursiveIteratorIterator 获取可在foreach 中使用的对象,并返回所需的文件,一次一个。

【讨论】:

    猜你喜欢
    • 2014-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    • 2023-03-05
    • 2013-08-19
    • 2012-10-13
    相关资源
    最近更新 更多