云客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

相关文章

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

MyBatis延迟加载与多级缓存全解析

《MyBatis延迟加载与多级缓存全解析》文章介绍MyBatis的延迟加载与多级缓存机制,延迟加载按需加载关联数据提升性能,一级缓存会话级默认开启,二级缓存工厂级支持跨会话共享,增删改操作会清空对应缓... 目录MyBATis延迟加载策略一对多示例一对多示例MyBatis框架的缓存一级缓存二级缓存MyBat

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

Redis中的AOF原理及分析

《Redis中的AOF原理及分析》Redis的AOF通过记录所有写操作命令实现持久化,支持always/everysec/no三种同步策略,重写机制优化文件体积,与RDB结合可平衡数据安全与恢复效率... 目录开篇:从日记本到AOF一、AOF的基本执行流程1. 命令执行与记录2. AOF重写机制二、AOF的

前端缓存策略的自解方案全解析

《前端缓存策略的自解方案全解析》缓存从来都是前端的一个痛点,很多前端搞不清楚缓存到底是何物,:本文主要介绍前端缓存的自解方案,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、为什么“清缓存”成了技术圈的梗二、先给缓存“把个脉”:浏览器到底缓存了谁?三、设计思路:把“发版”做成“自愈”四、代码

通过React实现页面的无限滚动效果

《通过React实现页面的无限滚动效果》今天我们来聊聊无限滚动这个现代Web开发中不可或缺的技术,无论你是刷微博、逛知乎还是看脚本,无限滚动都已经渗透到我们日常的浏览体验中,那么,如何优雅地实现它呢?... 目录1. 早期的解决方案2. 交叉观察者:IntersectionObserver2.1 Inter

Spring Gateway动态路由实现方案

《SpringGateway动态路由实现方案》本文主要介绍了SpringGateway动态路由实现方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录前沿何为路由RouteDefinitionRouteLocator工作流程动态路由实现尾巴前沿S

MyBatis Plus大数据量查询慢原因分析及解决

《MyBatisPlus大数据量查询慢原因分析及解决》大数据量查询慢常因全表扫描、分页不当、索引缺失、内存占用高及ORM开销,优化措施包括分页查询、流式读取、SQL优化、批处理、多数据源、结果集二次... 目录大数据量查询慢的常见原因优化方案高级方案配置调优监控与诊断总结大数据量查询慢的常见原因MyBAT

C#自动化实现检测并删除PDF文件中的空白页面

《C#自动化实现检测并删除PDF文件中的空白页面》PDF文档在日常工作和生活中扮演着重要的角色,本文将深入探讨如何使用C#编程语言,结合强大的PDF处理库,自动化地检测并删除PDF文件中的空白页面,感... 目录理解PDF空白页的定义与挑战引入Spire.PDF for .NET库核心实现:检测并删除空白页

分析 Java Stream 的 peek使用实践与副作用处理方案

《分析JavaStream的peek使用实践与副作用处理方案》StreamAPI的peek操作是中间操作,用于观察元素但不终止流,其副作用风险包括线程安全、顺序混乱及性能问题,合理使用场景有限... 目录一、peek 操作的本质:有状态的中间操作二、副作用的定义与风险场景1. 并行流下的线程安全问题2. 顺