2011-02-28 154 views
3

我有一个非常动态的(社交网络)网站运行聪明,我想启用缓存。Smarty缓存(动态内容)

我的结构: 的index.php显示()秒template.tpl template.tpl包括()秒indexContent.tpl

大多数template.tpl内容是静态..如脚本,横幅,页脚等..我怎么能缓存,但不是具体的部分看起来不同,取决于谁的登录(等因素)?

我发现3种方法:

  1. {nocache} {include='indexContent.tpl'} {nocache}
  2. {dynamic} {include ...
  3. 设置的每一页的cache_id。

不幸的是每个人都有一个问题:

  1. 并没有真正似乎工作?动态内容仍然被缓存..
  2. 不知道如何实现或如何不同于(1)
  3. 如何识别唯一?一些页面具有相同的“名称”,但具体成员不同的内容...认为“myProfile.php”

有什么建议吗?谢谢!!

+0

它在哪里缓存?您是使用APC进行缓存还是使用Memcached? – 2011-04-07 09:35:43

+0

我想用smarty创建缓存 – pws5068 2011-04-10 14:33:47

回答

1

我们有相同的情况。我们的整个头版缓存,除了一对夫妇的动态元素(新闻,最新的论坛线程)和最简单的方法,我发现来解决这个问题是在一个关键字添加到缓存的模板

NEWS_BLOCK

上您的逻辑脚本,然后加载您的新闻模板,并preg_replace与关键字。

$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); 
0

在3方式ü可以用这个名称保存缓存文件: myprofile_id例如已注册,他的ID是在用户表u能后,ü可以包括缓存保存缓存文件,因为他与这个名字myprofile_455 455 persone文件中的第三方物流文件是这样的:

{include file="cache/myprofile`$smarty.get.userid`.html"} 
+0

问题是我只想缓存模板数据。如果我缓存了用户455的“配置文件”页面,并且发生了新的评论,事件,私人消息或其他misc更新,它将不可见 – pws5068 2011-04-08 04:08:43

+0

因此,您可以只缓存静态部分,然后您有几个缓存文件用于包含,并且动态部分可以以常规方式显示(分配给变量)我们的概率是什么?! – afsane 2011-04-08 15:09:02

+0

我几乎需要与此相反.. {include}中的大部分内容完全是动态的。我显示的主要模板()是90%静态的。 – pws5068 2011-04-10 14:34:37

4

您可以使用反向代理,如Varnish缓存页面的静态部分和服务器端包含(对于Varnishi是ESI)包括动态内容。接下来,您需要为静态和动态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是生成动态内容的脚本。

清漆:提防gzip压缩,或缩小内容具有ESI的,因为它是描述in the answer here

+0

这不是我熟悉的。明天我会试验这个。谢谢 – pws5068 2011-04-08 04:11:26

0

我知道问题是旧的我仍然建议帮助别人的解决方案。

我似乎陷入了与我正在开发的社交网站相同的麻烦。这里是我的解决方案

  1. 似乎并没有工作?动态内容仍然被缓存..
  2. 不知道如何实现或者它是如何的不同(1)

只是删除你的网页像页脚和头的静态部分,并把它们放在一个不同的第三方物流文件。然后,包括第三方物流文件

{include file='head.html' cache_lifetime=5000} 

,或者相反删除您网页的动态部分,并把它放在另一个模板,并把它作为

{include file='head.html' nocache} 

3.How用来唯一地标识?有些具有相同的“名字”,但具体的成员有不同的内容......想到“myProfile.php”

与不同的内容,如个人资料页相同的页面,你可以通过配置文件ID作为参数传递给高速缓存呼叫。

$my_cache_id = $_GET['profile_id'];  
$smarty->display('index.tpl', $my_cache_id); 

这将确保具有不同参数的同一页面不被视为同一页面。

希望这会有所帮助。