在调度程序中处理AEM缓存的最佳方法是什么?



>我最近遇到了需要手动清除调度程序缓存的情况。例如,如果我正在修改任何 Js/css 文件,我需要手动清除调度程序缓存以获取那些修改后的新 Js/css,否则它将提供旧版本的代码。我刚刚听说ACS开发了版本clientlib,它将帮助我们进行版本控制。我对此有很多疑问。

在版本客户端库之前,AEM是如何管理的? AEM是否具有智能功能来管理版本化的客户端库? 处理方式是否正确? 我们可以创建一个脚本,在清除这些 JS/css 文件之前备份现有的吗? 我们还有哪些其他选择?

版本化的客户端库是正确的解决方案。但是您还需要更多:

  • 版本化客户端库是一种客户端缓存无效化技术。用于破坏浏览器缓存。
  • 它不会破坏调度程序缓存。除非手动清除,否则在调度程序中缓存的页面将继续提供服务。
  • 有关类似问题,请参阅此处。

要回答您的查询:

  • 在版本客户端库之前,AEM是如何管理的?正如@Subhash指出的那样,它是生产部署脚本(Bamboo或Jenkins(的一部分,用于在客户端库更改时清除调度程序缓存。
  • AEM是否具有智能功能来管理版本化的客户端库? - 这与任何CMS工具相同。缓存策略必须由http服务器负责,而不是AEM。此外,当您部署 js 代码更改时,您需要清除调度程序缓存以使页面反映新的 js 更改。
  • 处理方式是否正确?对于客户端破坏 - 版本化的客户端lib是100%万无一失的技术。对于调度程序缓存无效化,您需要不同的方法。
  • 我们可以创建一个脚本,同时在清除这些 JS/css 文件之前备份现有的脚本吗?应该是 Jenkins/Bamboo 作业中定义的 CI 流程的一部分。不是AEM的责任。
  • 我们还有哪些其他选择? - 对于调度程序缓存清除,请尝试调度程序刷新规则。您可以配置在发布/etc 设计路径时,它们应自动清除整个树,以便后续请求将命中发布者并获得更新的 clientlib。

推荐:

  • 使用版本控制的客户端库 + CI 驱动的调度程序缓存清除。

由于客户端库由 IT 团队修改并需要部署,因此请使其成为 CI 过程的一部分以清除缓存。调度程序刷新规则可能会有所帮助。但是有人修改 js/css 并在生产中点击发布按钮并不是用例。生产部署周期应执行此任务。调度程序缓存清除脚本的参考链接:1. Adobe 文档,2. 詹金斯方式,3. 竹子方式

在版本化的客户端库之前 - 通常将调度程序失效作为生成和部署管道的一部分进行连线。包部署到创作和发布实例后的最后一个阶段,调度程序失效。这仍然会导致浏览器缓存未被清除的问题(在客户端库名称未更改的情况下(。

为了克服这个问题,您可以构建自定义缓存破坏技术,在其中维护一个为每个版本命名 clientlib 的方案 - 例如:/etc/designs/homepageclientlib.v1.js/etc/designs/homepageclientlib.<<timestamp>>.js。这只是为了让浏览器触发从服务器重新下载文件。但是,随着 CI/CD 和这些天的频繁发布,这只是一个开销。 还有一些使用查询参数强制绕过调度程序的非优雅方法。实际上,即使现在打开任何AEM页面,您也可能会注意到cq_ck用于禁用缓存的查询参数。

来自acs commons的版本化客户端库现在是要走的路。轻松,该配置为 clientlibs 生成唯一的 md5hash,从而不仅强制绕过调度程序缓存,还强制绕过浏览器级缓存。

Adobe AEM有一个附加组件,用于执行资源指纹识别(不限于clientlibs,基本上适用于所有静态网站内容(,Cache-Control标头管理和AEM调度程序缓存的真正纯资源刷新。它还会从调度程序缓存中删除AEM创作过程未涵盖的更新资源(例如,当您部署最新代码时(。免费试用版可从 https://www.browsercachebooster.com/

相关内容

最新更新