云客Drupal源码分析之内部动态页面缓存dynamic_page_cache

本文主要是介绍云客Drupal源码分析之内部动态页面缓存dynamic_page_cache,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

以下内容仅是一个预览,完整内容请见文尾:

在阅读本篇前请先阅读本系列的《云客Drupal8源码分析之页面缓存PageCache的请求策略RequestPolicy及响应策略ResponsePolicy》

内部页面缓存和内部动态页面缓存的区别:

内部页面缓存Internal Page Cache,服务id:http_middleware.page_cache,可以视为匿名用户缓存(对登录用户不起作用),相比内部动态页面缓存(本主题内容),她在更早的http处理核心堆栈中执行,见本系列《HttpKernel堆栈》主题,匿名用户缓存处理的缓存比...

缓存链:
为了提高性能drupal逐级设置缓存,从用户到系统的全部缓存链如下:

浏览器缓存(通过http缓存标签控制) > 代理缓存服务器(cdn等,可多级) > 内部...

内部动态页面缓存:
内部动态页面缓存Internal Dynamic Page Cache,采用事件订阅方式执行,就像一对门卫一样,在请求进门时检查如果已经有需要的东西就直接给,然后不再允许进去消耗系统资源,如果没有,那么就进去,然后出来时记住请求和她需要的东西,下一次则不再进入,因此在系统核心流程中,入和出方向各订阅了一个事件,介绍如下:

入方向:
内部动态页面缓存模块订阅了请求事件'kernel.request',在系统初期由核心派发该事件,订阅如下:
服务:dynamic_page_cache_subscriber
类:Drupal\dynamic_page_c

。。。

出方向:

当核心派发完视图事件后通常会有产生的响应对象,系统接着派发响应事件'kernel.response',动态页面缓存便是此时参与系统进行缓存处理的。。。

 

响应策略:
为了性能响应策略服务使用了代理类以延迟启动,通过以上流程可以看出实例化响应策略对象后不一定能用上,如果真正去实例化她可能会产生不必要的浪费,因此只有在真正使用时才去实例化,这是一个解释延迟启动机制的绝好列子,真正的响。。。

默认添加了4个响应策略服务,如下:

服务id:p。。。

补充说明:
1、    从动态页面缓存模块中取回的响应是还没有经过占位替换的
2、该模块仅工作在可缓存响应上(实现了接口\Drupal\Core\Cache\CacheableResponseInterface),如果是其他响应则不会起作用

3、可查看请。。。

 

各位《云客drupal8源码分析》系列的读者:
本系列分享希望帮助大家理解drupal8底层原理,并缩短学习时间,但部分重点内容在博客仅发布前言和目录,这是因为:drupal在国外如此流行但在国内却很小众,一个重要原因应该是中文资料的缺乏,我们是否能够找到一种方式来激发高质量的中文资料出产?此时同是积极推动者的晴空提出能否用付费阅读的方式来鼓励更多教程作者?并建立了一个付费阅读drupal资料的网站,学习者仅需支付很少费用即可查询到最用心的知识注解,避免大量查找资料,可以节省大量学习时间是划算的,作者也能分配精力去开发高质量内容而得到回报,drupal是精品中的精品,超过一半的世界五百强用她做网站,难能可贵,国内普及初期需要一个良好的土壤,普及开后免费内容会越来越多,为了支持国内发展,云客决定将重点内容放在晴空的这个网站上收费阅读,读者只需要微信支付很少费用即可,云客在这里承诺该系列得到的所有订阅费用全部捐献给drupal深圳社区,用以组织活动等等,发展社区需要大家贡献力量,该网站于2017年3月29日上线,请移步:http://nowicode.com/ 阅读本篇完整版

我是云客,【云游天下,做客四方】,联系方式见主页,欢迎转载,但须注明出处

****************************************以下为前言和目录,请移步:http://nowicode.com/ 阅读本篇完整版*******************************

 


 


 


 

 

这篇关于云客Drupal源码分析之内部动态页面缓存dynamic_page_cache的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1044643

相关文章

vue基于ElementUI动态设置表格高度的3种方法

《vue基于ElementUI动态设置表格高度的3种方法》ElementUI+vue动态设置表格高度的几种方法,抛砖引玉,还有其它方法动态设置表格高度,大家可以开动脑筋... 方法一、css + js的形式这个方法需要在表格外层设置一个div,原理是将表格的高度设置成外层div的高度,所以外层的div需要

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操

SpringBoot实现动态插拔的AOP的完整案例

《SpringBoot实现动态插拔的AOP的完整案例》在现代软件开发中,面向切面编程(AOP)是一种非常重要的技术,能够有效实现日志记录、安全控制、性能监控等横切关注点的分离,在传统的AOP实现中,切... 目录引言一、AOP 概述1.1 什么是 AOP1.2 AOP 的典型应用场景1.3 为什么需要动态插

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Redis缓存问题与缓存更新机制详解

《Redis缓存问题与缓存更新机制详解》本文主要介绍了缓存问题及其解决方案,包括缓存穿透、缓存击穿、缓存雪崩等问题的成因以及相应的预防和解决方法,同时,还详细探讨了缓存更新机制,包括不同情况下的缓存更... 目录一、缓存问题1.1 缓存穿透1.1.1 问题来源1.1.2 解决方案1.2 缓存击穿1.2.1

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情

Redis主从复制的原理分析

《Redis主从复制的原理分析》Redis主从复制通过将数据镜像到多个从节点,实现高可用性和扩展性,主从复制包括初次全量同步和增量同步两个阶段,为优化复制性能,可以采用AOF持久化、调整复制超时时间、... 目录Redis主从复制的原理主从复制概述配置主从复制数据同步过程复制一致性与延迟故障转移机制监控与维

SpringCloud配置动态更新原理解析

《SpringCloud配置动态更新原理解析》在微服务架构的浩瀚星海中,服务配置的动态更新如同魔法一般,能够让应用在不重启的情况下,实时响应配置的变更,SpringCloud作为微服务架构中的佼佼者,... 目录一、SpringBoot、Cloud配置的读取二、SpringCloud配置动态刷新三、更新@R

Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

《Redis连接失败:客户端IP不在白名单中的问题分析与解决方案》在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能... 目录一、问题背景二、错误分析1. 错误信息解读2. 根本原因三、解决方案1. 将客户端IP添加到Re

Redis与缓存解读

《Redis与缓存解读》文章介绍了Redis作为缓存层的优势和缺点,并分析了六种缓存更新策略,包括超时剔除、先删缓存再更新数据库、旁路缓存、先更新数据库再删缓存、先更新数据库再更新缓存、读写穿透和异步... 目录缓存缓存优缺点缓存更新策略超时剔除先删缓存再更新数据库旁路缓存(先更新数据库,再删缓存)先更新数