繁体   English   中英

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

[英]How to cache specific parts of page in PHP intelligently?

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

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

看一下Cache_Lite PEAR模块

首先,如果要缓存页面的其余部分,可以通过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}}替换为函数调用结果,最后输出修改后的结果。

这样,您将无需编写代码并执行额外的AJAX请求(服务器调用的次数越多,性能越差)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM