【问题标题】:Vaadin @Javascript : clear cache for updated JS fileVaadin @Javascript:清除缓存以更新 JS 文件
【发布时间】:2015-03-10 12:49:36
【问题描述】:

我的应用程序中有一个 @JavaScript 注释,用于从类路径加载 .js 文件。

现在我对文件进行了更新并重新部署(本地),但我总是恢复旧版本。我已经尝试重新加载所有内容(ctrl+R、ctrl+F5),但这不起作用,我也不希望用户必须这样做。

我过去使用的一个技巧(没有 Vaadin)是在请求参数中附加版本(例如 ?version=1)并更新它以使 URL 发生变化。但显然 @JavaScript 注释不允许这样做(Vaadin 甚至不尝试加载文件)。

【问题讨论】:

  • 也许您的应用正在 UI 对象上使用 @PreserveOnRefresh 注释?这可能会阻止 Vaadin 重新加载任何 JS。
  • 不,我没有使用@PreserveOnRefresh。此外,我已经重新启动了服务器,这样就不会产生任何影响。我目前刚刚更改了文件名(添加了 _vxxx,其中 xxx 是一个数字)并且有效。
  • 所以你是说,即使服务器重新启动也会保留“旧”文件?你能为你的目标目录中的文件做一个find 吗?可能是,它存在多次(例如,一次来自您的 ide,一次来自您的构建工具)。如果两者都在类路径中,则只有一个被拾取。
  • 好吧,至少现在我已经重命名了文件,没有旧名称的文件存在。在重命名之前,我确实检查了 target 文件夹中的文件,它有新内容,但我仍然在浏览器中获取旧内容。

标签: javascript vaadin


【解决方案1】:

我已经通过利用 Vaadin servlet 配置的 resourceCacheTime 参数克服了这个问题:

@VaadinServletConfiguration(ui = MyUI.class, resourceCacheTime = 0)

虽然它有它的局限性,正如我对another question here 的回答中所述。

【讨论】:

    【解决方案2】:

    这是本地缓存JS文件的浏览器功能,与Vaadin无关。

    如你所见:如果你想确保用户拥有最新版本的 JS 文件,你应该将 JS 文件名重命名为:script_buildNumber.js

    【讨论】:

    • 我不同意这与 Vaadin 无关:Web 应用程序有办法告诉浏览器,例如不要缓存某些资源。我想出了自己重命名文件的答案,但这确实是一个技巧。至少能够添加请求参数可以防止我在版本控制中更改文件的实际名称。
    • 容器重新启动后,新文件肯定会从磁盘中重新加载,并且在默认配置中至少在 Fx 中重新加载 CTRL-F5 将拉取新文件。
    【解决方案3】:

    正如我在 1 月 12 日对该问题的评论中指出的那样,重命名文件有效。这似乎是目前唯一的方法,尽管它远非理想。

    【讨论】:

      【解决方案4】:

      使用 Chrome 的隐身功能(在访问辛辣/令人不快的网站时不要使用它)。

      只需以隐身模式打开浏览器https://support.google.com/chrome/answer/95464?hl=en,浏览器不会缓存任何内容。

      其他浏览器也有此功能(Opera、IE、Firefox、Safari)。

      【讨论】:

      • 我不希望我的用户必须以隐身模式访问我的网络应用程序以确保他们拥有最新的 javascript 文件。 Vaadin 应该提供一种方法来告诉浏览器不要缓存它们,或者支持在名称中添加请求参数,这样文件就不必物理重命名。
      • 当然,我同意你的观点,我以为你只需要它来开发。
      猜你喜欢
      • 1970-01-01
      • 2018-11-29
      • 2013-07-29
      • 1970-01-01
      • 1970-01-01
      • 2015-03-29
      • 2012-08-02
      • 1970-01-01
      • 2013-06-23
      相关资源
      最近更新 更多