我最近遇到过需要手动清除调度程序缓存的情况。例如,如果我正在修改任何Js / css文件,我需要手动清除我的调度程序缓存,以便获得那些修改过的新Js / css,否则它将提供旧版本的代码。我刚刚听说ACS开发了版本clientlib,它将帮助我们进行版本控制。我对此有很多疑问。
在版本clientlib之前,AEM是如何管理的? AEM是否有智能管理版本化的clientlibs? 处理它的方式是否正确? 在清除那些JS / css文件之前,我们是否可以创建一个可以恢复现有脚本的脚本? 我们还有哪些其他选择?
答案 0 :(得分:2)
Versioned clientlib是正确的解决方案。但是你需要更多:
回答您的疑问:
推荐:
由于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/
获得免费试用版。