Php Smarty缓存(具有动态内容)
我有一个运行smarty的非常动态的(社交网络)网站,我想为它启用缓存 我的结构: index.php display()s template.tpl template.tpl include()s indexContent.tpl template.tpl中的大部分内容是静态的。。例如脚本、横幅、页脚。。等等。我如何缓存那些但不是特定的部分,这些部分看起来不同,取决于谁登录(以及其他因素) 我发现了3种方法:Php Smarty缓存(具有动态内容),php,caching,dynamic,smarty,Php,Caching,Dynamic,Smarty,我有一个运行smarty的非常动态的(社交网络)网站,我想为它启用缓存 我的结构: index.php display()s template.tpl template.tpl include()s indexContent.tpl template.tpl中的大部分内容是静态的。。例如脚本、横幅、页脚。。等等。我如何缓存那些但不是特定的部分,这些部分看起来不同,取决于谁登录(以及其他因素) 我发现了3种方法: {nocache}{include='indexContent.tpl'}{noca
{nocache}{include='indexContent.tpl'}{nocache}
{dynamic}{include…
有什么建议吗?谢谢!!通过3种方式,您可以使用以下名称保存缓存文件: myprofile_id例如,在用户表u中注册且其id为455的人员可以使用此名称myprofile_455为其保存缓存文件 之后,您可以在tpl文件中包含缓存文件,如下所示:
{include file="cache/myprofile`$smarty.get.userid`.html"}
您可以使用反向代理(如Varnish)缓存页面的静态部分,并将动态内容包括在服务器端(Varnishi就是这样)。接下来,您需要为静态和动态URL设置缓存规则,以便静态URL将被缓存很长一段时间,而动态URL则根本不会被缓存 为了更容易理解整个想法,这里介绍了页面HTML代码的外观:
<html>
<head>...</head>
<body>
...some static layout...
<esi:include src="/esi/indexContent.php"/>
...some another static layout...
</body>
</html>
...
…一些静态布局。。。
…另一个静态布局。。。
其中/esi/indexContent.php是生成动态内容的脚本
对于Varnish:注意使用ESIs压缩或压缩的内容,正如所描述的那样我们有相同的场景。除了几个动态元素(新闻、最新论坛线程)之外,我们的整个首页都被缓存,我发现最简单的方法就是在缓存的模板中添加一个关键字 新闻组 然后在逻辑脚本上加载新闻模板,并用关键字替换它
$news_template = $smarty->fetch('news_template.smrt');
$page_body_raw = $smarty->fetch('frontpage.smrt');
$page_body = preg_replace('/NEWS_BLOCK/', $news_template, $page_body_raw);
我知道这个问题已经老了,我仍然在提出一个解决方案来帮助别人 我似乎在开发一个社交网站时也遇到了同样的麻烦。以下是对我有效的解决方案
{include file='head.html' cache_lifetime=5000}
或者相反,删除页面的动态部分,将其放入另一个模板中,并将其作为
{include file='head.html' nocache}
3.如何唯一地识别?某些页面具有相同的“名称”,但特定成员的内容不同…想想“myProfile.php”
对于具有不同内容的同一页面(如配置文件页面),可以将配置文件Id作为参数传递给缓存调用
$my_cache_id = $_GET['profile_id'];
$smarty->display('index.tpl', $my_cache_id);
这将确保具有不同参数的同一页面不会被视为同一页面
希望这有帮助。缓存在哪里?您是使用APC进行缓存还是使用Memcached?我正在尝试使用smarty创建缓存问题是我只想缓存模板数据。如果我缓存用户455的“配置文件”页面和一个新的评论、事件、私人消息或其他杂项更新发生时,它将不可见,所以你可以缓存静态部分,然后你有几个缓存文件用于包含,动态部分可以以常规方式显示(分配给变量)我们的问题是什么?!我几乎需要相反的情况。{include}中的大部分内容s是完全动态的。我显示的主模板()是90%静态的。哇,我不能理解你的问题!你可以将静态代码放在包含文件(90%)中,其他部分(动态部分)将用变量显示!!你可以反转它,没有问题!!例如:{include file=“cache/header\u myprofile”$smarty.get.userid.html“{$Name}{include file=“cache/footer\u myprofile'$smarty.get.userid.html”}`这不是我熟悉的东西。我明天会尝试一下。谢谢