1

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

4

4 回答 4

4

您应该考虑让 PHP自动加载您的类

如果这不起作用,那么您几乎只剩下目录扫描解决方案了,您不应该真正关心性能损失。如果你想要这个功能,你就会忍受成本。

一般来说,无论如何你都不应该过分强调 PHP 的性能。如果在您的框架完成后成为问题,请重新访问它。通过在框架中实施良好的缓存系统,您可能会发现您现在产生的任何性能增益/损失都没有实际意义。

请参阅过早优化

于 2011-02-17T22:26:38.400 回答
1

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

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

于 2011-02-17T22:26:00.270 回答
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;
    }
);
于 2011-02-17T22:27:25.623 回答
0

这取决于。

尝试你的方法和措施。您以后可以随时添加缓存。或者诉诸自动加载

于 2011-02-17T22:28:55.003 回答