缓存.
DXPR Builder 页面是 Drupal 字段渲染数组,带有自己的缓存元数据,以及模块为编辑器和许可证检查保留的少量内部缓存。本页列出了代码缓存的内容、使用的标签和上下文、何时失效,以及更新后需要手动清除的内容。
构建器字段
该 DXPR Builder 字段格式化器为每个构建器字段设置以下缓存元数据:
| 元数据 | 值 | 效果 |
|---|---|---|
| Cache context | user.roles:authenticated |
匿名访客和已登录访客使用各自的缓存条目。 |
| Cache tags | 实体自身的标签、config:dxpr_builder.settings,以及渲染语言的 config:language.entity.<langcode> 标签 |
保存实体、保存模块设置或更改语言配置时,渲染后的字段失效。 |
max-age |
0(任何已登录用户) |
构建器字段从不被 Dynamic Page Cache 缓存给已登录用户,因为渲染数组带有用户相关的 drupalSettings(邮箱、CSRF 令牌、档案)。 |
对匿名访客,字段按常规缓存,因此 Internal Page Cache 和 Dynamic Page Cache 无需运行模块代码即可提供构建器页面。在构建器中保存即保存实体,因此 Drupal 像处理其他保存一样使实体的缓存标签失效。
当字段启用编辑器时,模块会再次添加 config:dxpr_builder.settings。Asset source 设为 Cloud 且未配置产品密钥时,它还会将 max-age 设为 0,以便每个页面都显示产品密钥提示。
模块自己的管理表单会显式使 config:dxpr_builder.settings 失效:General Settings、AI、用户档案表单以及页面和用户模板表单。
页面中的视图和区块
区块和视图以空的 az-cms-element 占位符存放在已保存的 HTML 中。字段渲染时,模块加载每个区块或视图,用核心渲染器渲染,并将输出插入字段标记。视图的库和 drupalSettings 会复制到字段上;其缓存元数据像页面渲染期间构建的任何渲染数组一样,通过渲染器冒泡。
其结果是,视图的行会一直留在缓存字段中,直到视图的某个缓存标签失效。带基于时间的缓存的视图会在整个有效期内保留旧行。如果访客看到过期的行:
- 打开该视图,展开 Advanced,将 Caching 设为 Tag based。None 会停用 Dynamic Page Cache,但 Internal Page Cache 仍会为匿名访客保留整页。
- 保存该视图。保存任何视图还会使
config:view_list失效,从而清除模块为编辑器准备的视图列表。 - 清除所有缓存。
在编辑器中,您添加或更改的区块或视图通过 /dxpr_builder/ajax 获取。模块不缓存该响应。
内部缓存
所有条目都位于默认缓存箱(cache.default)中。元素选择器的缓存带有标签 dxpr_builder:cms_elements,以及所列实体类型的列表缓存标签,因此相关实体变化时它们会自动清除。
| 缓存 ID | 内容 | 清除方 |
|---|---|---|
dxpr_builder:cms_elements_blocks、dxpr_builder:cms_block_categories |
元素选择器的区块列表和区块分类 | 保存或删除内容区块或 webform(block_content_list、webform 列表标签)、卸载任何模块时删除条目、drush cr |
dxpr_builder:cms_disallowed_elements:<uid>:<roles hash> |
当前用户不可用的区块 | 相同的标签,以及用户每个角色的 config:user.role.<role> 标签 |
dxpr_builder:cms_elements_views、dxpr_builder:cms_view_elements_settings、dxpr_builder:cms_views_tags |
视图显示、其设置和编辑器用标识符 | 保存、添加或删除任何视图(config:view_list)、drush cr |
dxpr_builder:button_styles |
Button 元素的按钮样式 | 标签 dxpr_builder:cms_elements、drush cr |
dxpr_builder_license_info |
许可证状态调用的结果 | 授权时 24 小时后过期,未授权时 30 分钟后过期(LICENSE_CHECK_INTERVAL、LICENSE_NOT_AUTHORIZED_INTERVAL);网站向许可证服务器发送用户变更后失效 |
dxpr_builder_license_users |
许可证服务器返回的编辑人员列表 | 24 小时后过期;网站向许可证服务器发送用户变更后失效 |
dxpr_builder_blacklisted |
域名黑名单结果 | 一小时后过期,域名被屏蔽期间一分钟后过期 |
dxpr_builder:jwt_decoded:<sha256 of the key> |
解码后的产品密钥,每个密钥一条 | 标签 config:dxpr_builder.settings |
主题实用类(dxpr_builder_classes,在主题 .info.yml 中)来自 Drupal 缓存的主题信息,因此更改后需要先运行 drush cr,编辑器才能看到。图标集文件(*.dxpr_icon_sets.yml)在每次加载编辑器页面时读取,但其命名的库像任何新库一样需要 drush cr。
资源与聚合
六个编辑器脚本要么是外部的(Cloud),要么声明了 preprocess: FALSE,因此聚合从不处理它们。聚合适用于编辑器的辅助库,例如带 Sortable 的 dxpr_builder/editor.core,以及面向访客的文件(dxpr_builder/core、dxpr_builder/editor.frontend、elements.* 库和 bootstrap_5)。有两个症状可追溯到聚合缓存:
更新后清除哪些内容
-
运行数据库更新,然后清除缓存:
drush updb -y drush crdrush cr会重建构建器的库定义(跟随模块版本和资源来源)、聚合后的资源文件,以及上文的内部缓存。 -
以编辑人员身份打开一个构建器页面并保存。这会用当前版本的标记重写页面,并使其的实体标签失效。
-
在 Varnish 或 CDN 后面,请清除构建器页面或等待最长有效期过去;模块不发送清除请求。
如果访客仍看到页面的旧内容,请参阅 更新后出现的问题。