获取目录列表对php的性能有多大影响
这一次的问题非常简单,基本上我有一组文件夹,其中一些包含我希望在运行我的站点脚本时自动加载的文件。但是,我不希望必须指定要自动加载的文件,因为我希望该过程是动态的,并且我希望能够动态创建和删除不同的文件。 因此,最简单的解决方案当然是获取目录中的文件夹列表,并构建自动加载文件的路径,如果文件存在,那么脚本将包含它们。 但是,我的问题是,这会在多大程度上影响我脚本的性能?它实际上是一个我想稍后发布的框架,所以性能是一个非常重要的问题。获取目录列表对php的性能有多大影响,php,performance,directory,overhead,Php,Performance,Directory,Overhead,这一次的问题非常简单,基本上我有一组文件夹,其中一些包含我希望在运行我的站点脚本时自动加载的文件。但是,我不希望必须指定要自动加载的文件,因为我希望该过程是动态的,并且我希望能够动态创建和删除不同的文件。 因此,最简单的解决方案当然是获取目录中的文件夹列表,并构建自动加载文件的路径,如果文件存在,那么脚本将包含它们。 但是,我的问题是,这会在多大程度上影响我脚本的性能?它实际上是一个我想稍后发布的框架,所以性能是一个非常重要的问题。 有什么想法吗?这取决于磁盘速度、文件系统和目录的大小。不管怎样
有什么想法吗?这取决于磁盘速度、文件系统和目录的大小。不管怎样,动态加载目录以获取文件列表所需的时间将比加载静态列表所需的时间更长;可接受的增加幅度取决于您的要求
如果是一个选项,缓存该列表可能会有所帮助。这取决于磁盘速度、文件系统和目录的大小。不管怎样,动态加载目录以获取文件列表所需的时间将比加载静态列表所需的时间更长;可接受的增加幅度取决于您的要求
如果是一个选项,缓存列表可能会有帮助。
你应该考虑简单地让PHP.
如果这不起作用,那么您就只剩下目录扫描解决方案了,您不应该真正关心性能损失。如果你想要功能,你会忍受成本 总之,您不应该过分强调PHP的性能。如果在框架完成后出现问题,请重新审视它。通过在您的框架中实现一个好的缓存系统,您很可能会发现您现在所遭受的任何性能增益/损失都变得毫无意义参阅
< P>你应该考虑简单地让PHP。 如果这不起作用,那么您就只剩下目录扫描解决方案了,您不应该真正关心性能损失。如果你想要功能,你会忍受成本 总之,您不应该过分强调PHP的性能。如果在框架完成后出现问题,请重新审视它。通过在您的框架中实现一个好的缓存系统,您很可能会发现您现在所遭受的任何性能增益/损失都变得毫无意义请参阅。自动加载非常好,尽管它不是免费的,但性能的影响并不明显。当然,如果需要,您可以对其进行度量和重构 这是我的自动加载器:
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;
}
);
自动加载是伟大的,虽然它不是免费的,性能的影响是不明显的。当然,如果需要,您可以对其进行度量和重构 这是我的自动加载器:
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;
}
);
视情况而定
尝试你的方法和措施。您可以随时在以后添加缓存。或者求助于。视情况而定
尝试你的方法和措施。您可以随时在以后添加缓存。或者求助于。构建列表后,请记住,一旦可以将该数组序列化为缓存文件。。。这就是symfony自动加载在1.x系列中的工作原理。请记住,一旦可以将该数组序列化为缓存文件,构建列表后。。。这就是symfony自动加载在1.x系列中的工作原理。