【问题标题】:How can I ensure that the latest version of my javascript code is loaded for the client?如何确保为客户端加载最新版本的 javascript 代码?
【发布时间】:2012-01-19 11:33:42
【问题描述】:

我们的客户拥有数千名用户(他们都使用 Internet Explorer)和大量 JavaScript 文件,这些文件可以增强他们对我们产品的用户体验。

我遇到的问题是,无论何时我们更新这些脚本之一都无法知道客户端是否看到了最新版本。我们要做的是告诉我们的客户在查看任何更改之前进行硬刷新 (ctrl+f5)。显然这种方法并不理想。

我知道浏览器会根据 url 进行缓存,所以可以使用类似

【问题讨论】:

  • 为什么不适合您?添加ver 查询字符串是实现这一目标的一种非常标准的方法
  • 顺便说一句,为什么不能选择指纹识别?
  • 这在技术上是一种选择,但由于我们系统的设置方式,它不是一个很好的选择。如果没有其他方法可以解决它,我们可能必须找到一种很好的方法来实现它。不过,我想知道是否有任何替代方案。

标签: javascript internet-explorer caching browser


【解决方案1】:

您也可以像 jQuery 一样对文件名本身进行版本控制:

<script src='myScript-v1-2.js'>

然后,每次修改脚本时,都会增加版本号并修改包含它的页面以指向新脚本的名称。这与缓存相比是万无一失的,但仍然允许您的查看者获得缓存的最大好处,并且不需要更改 .js 文件的服务器配置。

完整的解决方案通常包括为您的主机网页设置一个相对较短的缓存生命周期,然后允许各种资源(样式表文件、JS 文件、图像等)具有更长的缓存生命周期以实现最大缓存。任何被指纹识别的东西都可以有很长的缓存寿命。请参阅 fabianhjr 发布的the reference,了解设置主机网页缓存生命周期的方法。它可以在网页本身(&lt;meta&gt; 设置)中完成,也可以通过服务器在 http 标头中完成。

如果您关闭脚本文件的缓存(可能必须在 Web 服务器级别为脚本文件完成),那么您的所有查看器都将失去缓存的性能优势,您将失去带宽和负载 -节省缓存的好处。如果您在多个页面中使用一个通用的 .JS 文件(一种通用设计模式),您的查看者会发现每个页面的性能都会变慢。

【讨论】:

  • 一般的指纹方式,是不是还依赖于header没有被缓存?
  • @Maxx - 指纹识别方法仅取决于主机网页没有被缓存太久,您必须为此实施指纹识别或在主机网页上设置某种缓存控制设置.理想的情况通常是主机网页上的缓存寿命相对较短,而大多数指纹资源的缓存时间较长。这使您可以快速访问更改,但对较大的资源进行长时间缓存。
  • 您也可以在不更改文件名的情况下通过添加如下参数进行版本控制:&lt;script src='myScript.js?version=2016-02-14'&gt;
  • @BSMP - 是的,你也可以这样做,但这需要特定的服务器支持才能返回与版本号匹配的正确脚本。
【解决方案2】:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    • 2011-07-30
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    相关资源
    最近更新 更多