缓存.

Learn DXPR BuilderManage the siteNaar productie

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 会复制到字段上;其缓存元数据像页面渲染期间构建的任何渲染数组一样,通过渲染器冒泡。

其结果是,视图的行会一直留在缓存字段中,直到视图的某个缓存标签失效。带基于时间的缓存的视图会在整个有效期内保留旧行。如果访客看到过期的行:

  1. 打开该视图,展开 Advanced,将 Caching 设为 Tag based。None 会停用 Dynamic Page Cache,但 Internal Page Cache 仍会为匿名访客保留整页。
  2. 保存该视图。保存任何视图还会使 config:view_list 失效,从而清除模块为编辑器准备的视图列表。
  3. 清除所有缓存。

在编辑器中,您添加或更改的区块或视图通过 /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)。有两个症状可追溯到聚合缓存:

更新后清除哪些内容

  1. 运行数据库更新,然后清除缓存:

    drush updb -y
    drush cr
    

    drush cr 会重建构建器的库定义(跟随模块版本和资源来源)、聚合后的资源文件,以及上文的内部缓存。

  2. 以编辑人员身份打开一个构建器页面并保存。这会用当前版本的标记重写页面,并使其的实体标签失效。

  3. 在 Varnish 或 CDN 后面,请清除构建器页面或等待最长有效期过去;模块不发送清除请求。

如果访客仍看到页面的旧内容,请参阅 更新后出现的问题。

接下来做什么?