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


Performance impact when require-ing a file many times vs reusing it

想想PHP模板。

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

任何想法都值得赞赏。

我假设"磁盘缓存"实际上指的是页面缓存?维基百科:页面缓存

如果是这样的话,我就不会真的倾向于在应用程序的性能上信任这样的东西。别忘了页面缓存只使用未使用的内存,并且在需要时会很乐意将其吐回。

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

抱歉你的胡言乱语有点语无伦次。。。

我最近在考虑

你大错特错了
毫无根据的思考很少有什么好处,但很可能会给你带来麻烦。不知从哪里冒出来的。

与其进行思考,不如进行分析
当然不是像H Hatfeld说的那样去衡量任何变化,而是去确定,他们是否需要任何变化。大多数时候,结果都是你们叫错了树
剖析是正确的事情,让你吠叫正确的。

读取一个模板文件onc,在内存中停止它,然后解析它是否有意义

对于它制作的高负载(或臃肿)项目
因此,PHP已经有了这样一个特性,称为bytecode cache。市场上有很多东西,在我们公司,我们正在使用eAccelerator。

但大多数时候默认情况下,每次请求解析就足够了
文件系统缓存和解析速度非常快,比通常的应用程序逻辑快得多,这一点您是绝对正确的,因为通常的应用软件逻辑必须首先进行优化。

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

在寻求优化代码时,需要记住的另一件事是确保您能够衡量变化。使用类似Xdebug的工具来评测代码,并衡量更改的效果。

编辑

由于这些文件目前确实包含PHP,请看一下这个问题/答案。我建议在文件中放入一个函数,这样它只需要加载一次,但可以使用不同的参数多次调用。