如何智能地在PHP中缓存页面的特定部分?

时间:2011-02-23 19:54:47

标签: php html caching meta-tags

问题: 我有一个有50k +页面的网站,其中大多数只在创建时更新一次,我正在为这些页面构建一个缓存,因为它们不需要对内容进行任何频繁的更改。但我对一些事情感到困惑。

  • 如果我缓存整个页面,如何在侧栏中保留用户登录/注销状态
  • 我如何缓存页面的元标记,因为主要缓存是在页面中间完成的,因为这是处理过程中最昂贵的部分。

4 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

关于第一点 - 如果要缓存页面的其余部分,可以通过AJAX加载登录状态侧栏。由于AJAX请求的结果是独立的(并且可能是未缓存的),因此它将正确更新。

假设您实际上是将元标记作为页面内容的一部分发送,您可能需要等待实际向输出流写入任何内容,直到完成所有处理后,以便您可以自由地计算内容以任何顺序,即使它们在实际的页面HTML内容中更早或更晚。

答案 2 :(得分:0)

显然我没有关于你的设置的具体信息,但一个常见的策略是简单地在Memcached中缓存数据库结果/页面特定的内容。如果Memcached不是您的选项,您可以在服务器上创建一个可写目录,并在那里缓存特定于页面的内容。因此,您仍然会在每个请求上生成特定于用户的内容,但不会产生不必要的查询数据库的开销。

答案 3 :(得分:0)

在输出之前应用内容过滤器。

您可以简单地在模板中使用作为动态内容的引用ID的部分,并使用动态调用的结果替换它们。

示例:

<p>some cached content</p>
<div id="user_box"> {{USER_BOX}} </div> 
<p>other cached content</p>

首先,获取缓存的内容,然后在代码中,将{{USER_BOX}}替换为函数调用结果,最后输出修改后的结果。

这样,您就不需要编写代码并执行额外的AJAX请求(服务器调用的性能越低)。

当然,如果你使用的是php,你可以使用像Twig(Symfony的一部分)这样的模板引擎处理你的缓存内容。这会增加一些额外的功能,如条件等。