新部署后如何清理缓存?

Posted

技术标签:

【中文标题】新部署后如何清理缓存?【英文标题】:How to clean cache after a new deployment? 【发布时间】:2014-06-06 20:53:45 【问题描述】:

我正在使用 JSF2.0/Primefaces 4.0 和 JBoss 7 开发应用程序。

问题是每次我进行新部署(使用 .war)时,所有用户都必须清理浏览器缓存才能看到更改(主要是图像定位)。

我知道浏览器会保存页面内容以使其运行更快,但我也知道有一种方法可以控制 HTTP 参数 cache-control 以使其重新验证页面。

而问题是:如何让客户端浏览器识别出有新的部署并清理存储的缓存?当然,使用 JBoss 7。

另外,我不想在每次访问时都重新验证缓存,只有当有新的 部署。

这可能吗?

【问题讨论】:

您必须准确确定正在缓存的资源是什么导致了问题。是否可能是对 CSS 文件的修改? 【参考方案1】:

我建议使用内置JSF 资源库 机制,它支持资源的版本控制。由于客户端缓存将在其路径更改时加载给定资源。这样,您可以更改资源的版本号并敦促客户端重新加载它们,而无需处理任何缓存老化策略。

在 SO 上有几篇关于这个主题的好文章

What is the JSF resource library for and how should it be used? JSF resource versioning JSF2 Static resource caching

【讨论】:

【参考方案2】:

如果缓存的是 css 文件,您可以使用此代码向 css 文件添加版本。这样您就不必自己维护版本。

<h:outputStylesheet>
@import url('/someFolder/resources/css/page.css?v=$applicationInfoBean.projectVersion')
</h:outputStylesheet>  

其中 applicationInfoBean.projectVersion 是我自己的 bean 和返回当前项目版本的方法。

另一种方法是更改​​ ResourceHandler 缓存资源的时间。默认时间为一周。你可以在 Mojarra 中改变它:

<context-param>
    <param-name>com.sun.faces.defaultResourceMaxAge</param-name>
    <param-value>28800000</param-value> <!-- 8 hours. --> 
</context-param>

在 MyFaces 中:

<context-param>
    <param-name>org.apache.myfaces.RESOURCE_MAX_TIME_EXPIRES</param-name>
    <param-value>3628800000</param-value> <!-- 6 weeks. -->
</context-param>

【讨论】:

不错的答案!这种方式应该可以正常工作,但我认为 JSF 资源库的版本控制是一种更好的做法。还是谢谢你:)

以上是关于新部署后如何清理缓存?的主要内容,如果未能解决你的问题,请参考以下文章

安装依赖项后如何清理heroku中的缓存?

帝国CMS后台添加了文章,更新了,清了缓存,后台也有显示新添加的文章,在新闻列表页面却没有新添加的文章

清理缓存后如何恢复 Blazor WASM“离线缓存”?

如何清除tomcat缓存

firefox火狐浏览器怎么清理缓存

如何清理 xcode 构建缓存?