今天,成都长风云Drupal开发团队分享一点关于Drupal网站性能优化的文章,使用缓存 Internal Page Cache(内部页面缓存)提高Drupal网站性能。
Internal Page Cache(内部页面缓存)是Drupal的核心模块之一,负责缓存由匿名用户请求的页面。
当Drupal页面被缓存并且匿名用户发出新的请求时,Drupal不需要执行任何渲染或页面构建过程。它只需从缓存中检索已渲染的页面,然后将其发送给客户端。
Internal Page Cache(内部页面缓存)只适用于匿名用户而不适用于已验证用户的原因是,向客户端返回的内容必须对所有用户完全相同。
对于已验证的用户来说,虽然部分内容可能对每个人都是相同的,但总会有一些可以变化的内容,比如用户块会显示用户的名字或其他用户特定信息。
对于这些情况,有一个名为“动态页面缓存”(Dynamic Page Cache)的模块,它可以为匿名用户和已验证用户提供缓存服务。
一、功能
如果我们访问安装了该模块但未使用内存缓存系统(如 Redis 或 Memcache)的数据库,我们会看到一个名为“page_cache”的表。
在这个表格中,缓存的响应对象被存储,主要包括以下列:
CID:缓存响应对象的URL,用作唯一标识符以检索缓存对象。
DATA:存储响应对象的序列化版本。
EXPIRE:缓存对象的过期日期。默认情况下为-1,表示不会过期。
TAGS:构成页面的所有组件的缓存标记。这样,如果这些组件中的任何组件被修改,缓存对象将被无效化,并且页面将被重新构建。
CHECKSUM:借助此字段,Drupal可以快速确定与对象相关联的任何缓存标记是否已被无效化。
二、HTTP中间件
它定义了自己的中间件(中间件API)来在HTTP请求到达主内核之前拦截它。
从广义上讲,在不涉及太多细节或验证过程的情况下,该中间件确定响应是否适合缓存。如果存在,则检查是否存在缓存对象;如果它存在,它返回它;如果没有,它将委托响应对象的生成。在将响应发送回客户机之前,它将缓存它以备将来的请求。
三、如何知道一个页面是否被缓存
知道页面是否被内部页面缓存缓存的方法是在浏览器的检查器中检查响应头。
当模块处于活动状态时,它会在响应的头中添加一个新参数:" X-Drupal-Cache "。
因此,如果您在登录后访问一个页面,您将不会在请求头中看到此参数,因为如前所述,它仅适用于匿名用户。但是,如果您以匿名用户身份访问它,您将看到此参数。
参数X-Drupal-Cache的取值:
MISS:表示在发出请求时该响应没有缓存对象,因此返回的页面不是来自缓存。下一次对同一页面发出请求时,该值将为HIT。
HIT:表示正在返回一个缓存页面。
五、特性
最大年龄
内部页面缓存的最大年龄参数未激活。这意味着即使在参数中设置了特定的值,内部页面缓存也不会考虑该值,并且永远不会根据该参数使缓存对象无效或重新生成缓存对象。
如果我们想基于Max Age设置无效,一个可能的解决方案是创建一个自定义缓存标记,并将其与我们想要应用特定过期的缓存对象关联起来。
然后,我们必须配置一个cron作业,使其以所需的间隔运行,以使缓存标记无效。
六、缓存上下文
缓存上下文不适用于提供给匿名用户并由内部页面缓存缓存的页面。正如我们所看到的,它直接返回缓存的对象,因此在缓存之前,它只在构建页面时考虑缓存上下文。
七、如何使Drupal缓存失效
通过内部页面缓存重新生成缓存对象的唯一方法是使与每个缓存页面关联的缓存标记无效,或者手动清除缓存。
八、建议
Drupal官方建议中小型Drupal站点或安装上启用此缓存系统。如果站点的规模或流量较大,则应考虑使用其他缓存层,例如代理缓存。
实际上,如果启用了该模块并且存在代理缓存,则将有两层缓存执行相同的功能,因此建议禁用内部页面缓存。