获取目录列表对php的性能有多大影响

时间:2011-02-17 22:23:02

标签: php performance directory overhead

这次非常简单的问题,基本上我有一组文件夹,其中一些包含我想在运行我的网站脚本时自动加载的文件。但是我不想指定要自动加载的文件,因为我希望该过程是动态的,我希望能够动态创建和删除不同的文件。 因此,当然最简单的解决方案是获取目录中的文件夹列表并构建自动加载文件的路径,如果文件存在则脚本包含它们。 但是,我的问题是,这将影响我的脚本的性能有多大?它实际上是一个我想稍后发布的框架,因此性能非常重要。 任何想法?

4 个答案:

答案 0 :(得分:4)

您应该考虑简单地让PHP autoload your classes

如果这不起作用,那么你几乎完全没有使用目录扫描解决方案,而且你不应该真正关心性能损失。如果你想要这个功能,你会花费很多钱。

一般来说,你不应该过分强调PHP中的性能。如果在您的框架完成后成为问题,请重新访问它。你可以通过在你的框架中实现一个好的缓存系统来找到你现在所带来的任何性能上的收益/损失。

请参阅Premature Optimization

答案 1 :(得分:1)

这取决于您的磁盘速度,文件系统和目录的大小。无论如何,必须动态加载目录以获取文件列表将比加载静态列表花费更长的时间;可以接受多少增加取决于您的要求。

如果是一个选项,缓存该列表可能有所帮助。

答案 2 :(得分:0)

自动加载很棒,虽然它不是“免费”的,性能影响并不明显。当然,如果需要,你可以测量它并重构。

这是我的自动加载器:

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;
    }
);

答案 3 :(得分:0)

取决于。

尝试您的方法和衡量标准。您可以随时添加缓存。或者诉诸autoload