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

时间:2018-05-20 22:01:36

标签: apache caching aem dispatcher

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

在版本clientlib之前,AEM是如何管理的? AEM是否有智能管理版本化的clientlibs? 处理它的方式是否正确? 在清除那些JS / css文件之前,我们是否可以创建一个可以恢复现有脚本的脚本? 我们还有哪些其他选择?

3 个答案:

答案 0 :(得分:2)

Versioned clientlib是正确的解决方案。但是你需要更多:

  • Versioned Clientlibs是一种客户端缓存清除技术。用于破坏浏览器缓存。
  • 它不会破坏调度程序缓存。除非手动清除,否则在调度程序中缓存的页面将继续提供服务。
  • Refer here提出类似问题。

回答您的疑问:

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

推荐:

  • 使用Versioned Clientlibs + CI驱动的调度程序缓存清除。

由于IT团队修改了clientlib并需要部署,因此将其作为CI流程的一部分来清除缓存。 Dispatcher flush规则可能有所帮助。但是,在生产中修改js / css并点击发布按钮并不是特意。生产部署周期应该执行此任务。调度程序缓存清除脚本的参考链接:1。Adobe documentation,2。Jenkins way,3。Bamboo way

答案 1 :(得分:0)

在版本化的clientlibs之前 - 您通常将调度程序失效作为构建和部署管道的一部分。将包部署到作者并发布实例后的最后阶段,调度程序无效。这仍然导致浏览器缓存未被清除的问题(在clientlib名称未更改的情况下。)

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

来自acs commons的版本化clientlibs现在是可行的方法。无忧无虑,配置为clientlib生成唯一的md5hash,从而不仅绕过调度程序缓存,还强制浏览器级缓存。

答案 2 :(得分:0)

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

获得免费试用版。