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

如何在PHP中智能地缓存页面的特定部分?,php,html,caching,meta-tags,Php,Html,Caching,Meta Tags,问题: 我有一个网站,其中有50k+的网页,其中大多数只更新了一次的创建时间,我正在为这些网页建立一个缓存,因为他们不需要对内容进行任何频繁的更改。但我对一些事情感到困惑 如果缓存整个页面,如何在侧边栏中保留用户登录/注销状态 Li >如何缓存页面的元标签,因为在页面中间进行了主缓存,因为这是最为昂贵的部分,与处理有关。 第一点-如果您想缓存页面的其余部分,可以通过AJAX加载登录状态侧栏。由于AJAX请求的结果是独立的(可能不是缓存的),因此它将正确更新 假设您实际上是将meta标记作为页

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

  • 如果缓存整个页面,如何在侧边栏中保留用户登录/注销状态
  • <> Li >如何缓存页面的元标签,因为在页面中间进行了主缓存,因为这是最为昂贵的部分,与处理有关。
第一点-如果您想缓存页面的其余部分,可以通过AJAX加载登录状态侧栏。由于AJAX请求的结果是独立的(可能不是缓存的),因此它将正确更新


假设您实际上是将meta标记作为页面内容的一部分发送,那么您可能希望等待将任何内容写入输出流,直到完成所有处理之后,这样您就可以自由地按任何顺序进行计算,即使它们在实际页面HTML内容中出现得更早或更晚。

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

请查看。

在输出之前应用内容筛选器

您可以简单地使用模板中的部分,这些部分是应该是动态的内容的引用ID,并动态地用函数调用的结果替换它们

例如:

<p>some cached content</p>
<div id="user_box"> {{USER_BOX}} </div> 
<p>other cached content</p>
一些缓存内容

{{USER_BOX}} 其他缓存内容

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

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


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

我知道这很简单,你没有回答我的问题,我只想缓存页面的中间部分,但我仍然想缓存元标记,如何实现这两个功能?你可以对这两个都使用相同的技术,但你会缓存它们(有些)分开。这是实际的问题,我不想有两个缓存文件,一个用于元标记,另一个用于内容,难道没有其他更好的方法来处理这两件事吗。你不一定要有两个文件,你可以将它们放在同一个文件中,用一些神奇的数据将它们分开。但是,这仍然是有点独立的,这是无法避免的,因为您试图缓存的数据将位于文档的两个独立部分中。