Caching 缓存破坏:追加查询字符串还是重命名文件?

Caching 缓存破坏:追加查询字符串还是重命名文件?,caching,gulp,frontend,Caching,Gulp,Frontend,当我们试图破坏静态资产缓存时,有两种常见的方法: 通过附加查询字符串,如assets/file.ext?v=123abc 通过重命名文件,如assets/file.123abc.ext 然而,经过几天的搜索,我发现大多数构建工具更喜欢重命名文件,例如。在我看来,这种修订将在服务器上生成大量文件块: assets |_ file.a.ext |_ file.b.ext |_ file.c.ext |_ file.d.ext |... 对此有什么想法吗?经过几天的搜索,我找到了一些有趣的

当我们试图破坏静态资产缓存时,有两种常见的方法:

  • 通过附加查询字符串,如
    assets/file.ext?v=123abc

  • 通过重命名文件,如
    assets/file.123abc.ext

  • 然而,经过几天的搜索,我发现大多数构建工具更喜欢重命名文件,例如。在我看来,这种修订将在服务器上生成大量文件块:

    assets
     |_ file.a.ext
     |_ file.b.ext
     |_ file.c.ext
     |_ file.d.ext
     |...
    

    对此有什么想法吗?

    经过几天的搜索,我找到了一些有趣的查询字符串解决方案(
    assets/file.ext?v=123abc
    ):

    如果我们使用CDN来服务静态资产,那么动态页面和静态资产是分开托管的。一旦我们想要发布新版本的应用程序,就会发生冲突:应该首先更新哪部分资源

  • 先浏览页面。如果用户在更新动态页面后立即访问您的站点,则资源指向新版本,例如
    资源/file.ext?v=456def
    ,然后浏览器下载旧资源并将其缓存为新版本,不幸的是,这些用户将永远无法获得正确的资源

  • 首先是资产。假设在新版本的资产发布后,有一些新用户立即访问您的站点,旧页面和新脚本,啊哈!可能有一些致命的错误,你的网站得到booooom

  • 因此,这里有了重命名文件的解决方案(
    assets/file.123abc.ext
    )。不同版本的文件命名不同,因此它们不会相互覆盖。因此我们先更新了资产,然后更新了页面,一切都如期进行,呜呼

    有关更多详细信息,请阅读本文(中文):