2015-12-15 69 views
2

我正在使用Smarty处理旧的旧版PHP应用程序。我不熟悉Smarty。因此我的问题。Smarty是否使用APC(或其他缓存解决方案)?

我知道Smarty模板已经编译到PHP中。然后,他们被调用一些数据来生成输出。生成的PHP将作为此过程的一部分进行编译。

APC(和其他缓存解决方案)避免在用户请求之间重新编译PHP。 i)如果我用一个原始模板调用Smarty,它会先将它编译成PHP,然后再编译成操作码,对不对?

二)如果一个高速缓存系统,如APC在我的PHP应用程序已启用,如果模板已经被调用(即,在过去的编译):

一)将Smarty的足够聪明,不重新编译每个用户请求将模板导入PHP?

b)编译模板的PHP的操作码是否会通过APC重新使用?

为什么我会问这些问题?这个遗留应用程序早已实施(2010年之前的一些部分)。他们已经实现了所有Smarty模板的预编译系统,并将它们复制到应用程序的某个目录中,以直接调用生成的PHP代码。

我相信它可能在性能方面有意义,但现在,由于操作码缓存解决方案仍然可用,它仍然有意义吗?我们可以摆脱这种预编译过程吗?

回答

2

Smarty在首次使用时将所有.tpl文件编译为PHP,并将结果放入已配置的缓存目录中。这些PHP文件就像其他任何PHP文件那样是included,所以没有什么特殊的APC/OpCache需要为它们调用。

在后续请求中,Smarty将检查底层.tpl文件的时间戳是否发生了变化,如果有,则重新编译;否则,它将只保留现有的PHP文件。此行为can be turned off, e.g. on a production server where files should not be edited(此设置was available in Smarty 2 as well,这不算什么新鲜事)。

我不确定你所描述的手动编译过程是如何实现的;从您的描述中听起来似乎只是复制了Smarty已经做的事情,但是通过“加热缓存”对每个模板上的第一次点击进行小幅提升。它当然与APC/OpCache的存在与否无关 - 这不会改变Smarty多久将东西编译成PHP的频率,也不会改变PHP将PHP编译成“操作码”的频率。

有可能是你有没有发现/描述使用一些其他的把戏,或者也可能是系统的程序员以前根本不知道他们在做什么,过复杂的事情。

+0

好吧,所以我猜PHP会像对待任何其他PHP文件一样对待生成的Smarty PHP。正确? – JVerstry

+1

是的,PHP引擎(以及它的APC或OpCache扩展)不会知道Smarty写这个文件,而不是你或者打印机上的一千个猴子。 – IMSoP

相关问题