将更新部署到Web应用程序的正确方法是什么?

时间:2016-07-01 09:43:05

标签: html versioning

我有一个可用的Web应用程序,包含index.html文件,多个html页面,一个js文件和一些css

这是一个全新的应用程序,正如预期的那样,有一些小错误可以用于生产。

我的问题是:在我纠正错误并替换相关文件后,很有可能用户'浏览器仍然会加载替换文件的缓冲版本,因此这些用户不会看到

我找到了一些关于使用版本标记的建议(类似...?version=x.y...),但我不清楚如何使用它。

此外,如果我更改(例如)更新文件的名称(例如从ABC_001.htmlABC_002.html),我还需要更改引用它的文件,这意味着我需要也改变它的版本,...并重复这个直到应用程序的引导点(即index.html)。

那么,任何人都可以与我分享(详情/示例将受到高度赞赏),一旦部署新版本文件,有哪些标准方法可以保证使用?

提前感谢任何有用的建议。

2 个答案:

答案 0 :(得分:0)

如果要更改文件名,则需要在引用它们的任何位置更改它。没有办法解决这个问题。

为了确保您的用户始终能够看到更新版本的文件,使用链接末尾的版本号是单向的。另一种方法是您可以在HTML页面中使用元标记标题,如下所示:

<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">

将此设置为&#34; no-cache&#34;确保浏览器始终向服务器发送请求&amp;不加载缓存的内容。

您可以使用.js&amp;的版本号技术。 .css文件。

答案 1 :(得分:0)

两个基本假设:

  1. 如果客户看到您的网站的某个稍微过时的版本仍然包含错误,那真的不重要;毕竟,这个有缺陷的版本可能已经在那里停留了几个小时/几天/几周,而且还有几个小时不会产生很大的不同。
  2. 您希望确保访问者获得一致的版本;即,如果您更新了两个Javascript文件,并且文件A取决于文件B中的修复程序,那么您要么访问者拥有这两个文件的旧版本,要么是两个文件的新版本,但不是旧版本的不兼容组合和新版本。
  3. 要确保第2点,您将要显示您的文件版本,如您所示。简单地添加foo.js?v=2之类的内容会使URL不同,这会使浏览器认为它是一个不同的文件,并确保它从服务器获取它。 理想情况下您的服务器实际上可以提供所请求的版本;即如果浏览器请求v=2它将实际收到文件的第2版,v=3将提供文件的第3版等。虽然效果不大,但实施起来可能相当复杂。

    所以你想要的是对你的资产进行自动版本控制。这意味着您要么拥有像PHP这样的服务器端语言,它包含模板中的所有JS文件,并自动向它们添加...?v=...;或者您有一个构建系统,在您将文件上传到服务器之前执行此操作。有很多不同的方法可以做到这一点,具体的建议有点超出了这个答案的范围。

    一旦你有了这个,你有两种情况之一:

    1. 访问者从您的服务器获取最新的HTML文件,该文件引用了它不知道的Javascript文件版本,这使得它从您的服务器获取这些最新文件。正是你想要的。
    2. 访问者正在访问HTML文件的缓存版本,该文件引用了缓存中已有的Javascript文件版本,因此它完全由您网站的旧缓存版本运行。再次,看到主要假设#1,这不是一个真正的问题。
    3. 虽然有一个不幸的第三个案例:

      1. 访问者正在访问HTML文件的缓存版本,该文件引用了Javascript文件的过期版本,浏览器不会碰巧在缓存中。如果您的服务器无法实际提供这些过时的文件,浏览器将会获取最新的最新Javascript文件,您可能会遇到内部兼容性问题,因为某些内容并不匹配。
      2. 同样,如果您的服务器具有版本控制的实际概念,则可以修复此问题,但实现起来可能相当复杂,并且可能不值得这样做。

        避免这种情况最实用的方法是为HTML文件选择合理的缓存策略,这样缓存就不会过时,并且可能出现这种不匹配的时间窗口会降低到最小可能时间。

        基本上不需要自己对HTML文件进行版本控制。最重要的是它引用的HTML + Javascript / CSS资产一致,要么全部在同一旧版本,要么全部在最新版本上。 HTML本身的版本并不重要,只会影响您的网站的最新状态,无论如何,您必须使用合理的缓存策略来控制这些内容。

        底线:自动版本化您的资产+合理地缩短引用HTML文件的到期时间在99%的情况下都可以实现。在不放弃缓存的情况下压缩剩余的1%可能会非常耗费工作量。