Php Smarty是否使用APC(或其他缓存解决方案)?

Php Smarty是否使用APC(或其他缓存解决方案)?,php,templates,caching,smarty,Php,Templates,Caching,Smarty,我正在使用Smarty开发一个旧的遗留PHP应用程序。我不熟悉Smarty。这就是我的问题 我知道Smarty模板是编译成PHP的。然后,使用一些数据调用它们以生成输出。生成的PHP作为此过程的一部分进行编译 APC(和其他缓存解决方案)避免在用户请求之间重新编译PHP i) 如果我使用原始模板调用Smarty,它会先将其编译成PHP,然后再编译成操作码,对吗 ii)如果在我的PHP应用程序中启用了APC之类的缓存系统,并且如果模板在过去已被调用(即编译): a) Smarty是否足够聪明,不会

我正在使用Smarty开发一个旧的遗留PHP应用程序。我不熟悉Smarty。这就是我的问题

我知道Smarty模板是编译成PHP的。然后,使用一些数据调用它们以生成输出。生成的PHP作为此过程的一部分进行编译

APC(和其他缓存解决方案)避免在用户请求之间重新编译PHP

i) 如果我使用原始模板调用Smarty,它会先将其编译成PHP,然后再编译成操作码,对吗

ii)如果在我的PHP应用程序中启用了APC之类的缓存系统,并且如果模板在过去已被调用(即编译):

a) Smarty是否足够聪明,不会在每次用户请求时将模板重新编译到PHP中

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

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


我相信它在当时的性能方面是有意义的,但现在,既然操作码缓存解决方案仍然可用,它仍然有意义吗?我们能摆脱这个预编译过程吗?

Smarty在第一次使用时将所有
.tpl
文件编译成PHP,并将结果放在配置好的缓存目录中。然后,这些PHP文件与任何其他PHP文件一样被
include
d,因此不需要为它们调用任何特殊的APC/OpCache

在后续请求中,Smarty将检查底层
.tpl
文件的时间戳是否已更改,如果已更改,则重新编译;否则,它将只保留现有的PHP文件。这种行为(这种设置,并不是什么新鲜事)

我不确定你所描述的手工编译过程想要实现什么;从您的描述听起来,它只是在复制Smarty已经做过的事情,但是通过“预热缓存”对每个模板的第一次点击有一个小的提升。这当然与APC/OpCache的存在与否无关——这不会改变Smarty将东西编译成PHP的频率,只会改变PHP将PHP编译成“操作代码”的频率


可能还使用了一些你没有发现/描述的其他技巧,或者可能是系统的前程序员不知道他们在做什么,而且事情过于复杂。

Ok,所以我猜PHP会像对待其他PHP文件一样对待生成的Smarty PHP。正确吗?是的,PHP引擎(及其APC或OpCache扩展)不会知道Smarty编写了该文件,而不是你或一千只使用打字机的猴子。