需要多次文件与重用文件时的性能影响

时间:2012-03-27 14:18:27

标签: php caching filesystems

想想PHP模板。

我最近在考虑是否有必要一次读取模板文件,将其存储在内存中,然后解析它(例如用值替换占位符),而不是根据需要多次需要该文件。使用场景将是一个列表项,其列表项被模板化为单独的文件。我的第一个想法是倾向于前一个解决方案,因为我认为替换值比使用文件系统中的文件更容易操作。然而,后来我意识到几乎所有的硬盘驱动器(或其他存储器)都有自己的缓存,并且需要反复使用相同的文件,不会导致每次都重新读取,而是从缓存中重新提供。

任何想法都表示赞赏。

3 个答案:

答案 0 :(得分:0)

每次包含文件时,PHP都必须解析它。可以使用像APC这样的操作码缓存来抵消此惩罚。如果您的模板不包含任何PHP(它听起来不是这样),我建议将模板加载到内存中一次,然后根据需要重新使用它。

在寻求优化代码时要记住的另一件事是确保您可以衡量更改。使用Xdebug之类的内容来分析您的代码并衡量您的更改所带来的影响。

修改

由于文件当前包含PHP,请查看this question/answer。我建议在文件中放一个函数,这样它只需要加载一次,但可以用不同的参数多次调用。

答案 1 :(得分:0)

我认为“磁盘缓存”你实际上指的是页面缓存? Wikipedia: Page Cache

如果是这样,我真的不愿意相信这样的事情与我的应用程序的性能。不要忘记页面缓存只使用UNUSED内存,并且会在需要时愉快地将其吐出。

我倾向于使用像APC这样的东西作为对象缓存,这有很大的副作用,无需实际重写任何代码,因为它们都是在幕后完成的。另一种可能性是将模板分配给变量并不断重复使用。或者,如果你想甚至可以使用Memcache,这种东西对于缓存数据库返回或大型数据集更有用。

对于稍微不连贯的乱哄哄抱歉......

答案 2 :(得分:0)

  

我最近在考虑

你错了。
毫无根据的无耻考虑很少有任何好处,但很可能会让你陷入困境。无处不在。

不必考虑,而是必须进行分析 当然不会像H Hatfeld所说的那样衡量任何变化,但要确定它们是否需要任何变化。大多数时候,你发现你正在吠叫错误的树 分析是让你吠叫的正确方法。

  

是否有意义读取模板文件onc,将其存储在内存中,然后解析它

对于它所做的高负荷(或臃肿)项目 因此,PHP已经有了这样一个名为bytecode cache的功能。在我们公司有一个plenty of the thing on the market,我们正在使用eAccelerator。

但大部分时间默认每次请求解析都足够了 你绝对正确的文件系统缓存和解析速度非常快,比通常的应用程序逻辑快得多,后者必须首先进行优化。