Smarty Caching vs滚动你自己?

时间:2010-12-16 01:35:42

标签: php caching smarty

据我了解,当你在smarty,smarty缓存编译模板时打开缓存。然后,这些编译的模板可用于加速页面的呈现。在这样的智能应用程序之上运行自己的缓存级别不是一个好主意。

if(a cache for this page exists){
    -Don't run my application, don't include my files don't instantiate my classes.
    -Send the cached version of this page to the user
    -end the script here
}else{//if the cache for this page does not exist or is not current
  - run my application as usual
  -save all the output to a file for next time
}

每当我网站上发生更新此页面内容的事情时,例如管理员对网站内容进行更改就会删除缓存文件。我觉得我必须在这里遗漏一些东西。这个方法允许我存储每个页面的所有html版本,并在它有效时发送。这似乎会大大提高我网站的速度。

编辑:好的,所以我发现smarty确实存储了我的网站的html版本。如果缓存是最新的,则如果我的应用程序的其余部分运行,如何阻止我的应用程序运行。我是否首先包含并实例化smarty并执行类似

的操作
if($smarty->usingcache())[
exit;
}

2 个答案:

答案 0 :(得分:1)

如果您的网站是静态的,这将有效。但在那种情况下,你不需要Smarty ......

假设您更新了数据库中的记录。然后,您站点中包含直接或间接受更新影响的输出的所有页面都必须无效。你怎么知道哪些页面无效?

答案 1 :(得分:1)

在进行某些特定于请求的处理之前,您怎么知道页面的外观?在检查客户端的身份验证状态之前,执行一些数据库查询(或获取的缓存结果)以获取最新信息,您无法知道最近呈现的页面是否与此次呈现的页面相同。 Smarty用这个策略解决了这个问题:

  • 您的应用会根据请求执行所有域/业务逻辑。
  • 您的应用使用模板变量填充智能模板实例
  • Smarty生成模板和模板变量的哈希值
    • 如果哈希不在缓存中,Smarty会呈现模板并将其缓存
    • 如果散列位于缓存中,Smarty将返回缓存的模板而不是渲染
    • 如果缓存已满,则smarty驱逐旧的缓存页面以腾出空间。

默认情况下,Smarty使用文件系统进行缓存,但缓存策略与任何键值存储兼容。事实上,其他商店也存在插件,例如memcached的this one