关于前端缓存中,指纹与查询字符串的区别

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/csdn_yudong/article/details/83217212

文章目录

Sprockets 把所有 JavaScript文件连接为一个主 .js 文件,把所有 CSS 文件连接为一个主 .css 文件。我们可以按需定制连接文件的方式。在生产环境中,Rails会在每个文件名中插入SHA256指纹,以便Web浏览器缓存文件。当我们修改了文件内容,Rails会自动修改文件名中的指纹,从而让原有缓存失效。

Sprockets只用指纹的方式是在文件名中添加文件内容的哈希值,并且通常会添加到文件名末尾。例如,对于 CSS 文件 global.css ,添加哈希值后文件名可能变为:

global-908e25f4bf641868d8683022a5b62f54.css

以前呢,Rails采用的策略是,通过内置的辅助方法,为每一个指向静态资源文件的链接添加基于日期生成的查询字符串。

global.css?1309495796

现在都一致认同使用指纹的方式,查询字符串有如下缺点:

1、“避免在可缓存的资源上使用查询字符串”。他发现,在使用查询字符串的情况下,有5%——20%的请求不会被缓存。对于某些CDN,通过修改查询字符串根本无法是缓存失效。
【这就很坑爹了】

2、在多服务器环境下,不同节点上的文件名有可能发生变化。
如果查询字符串是基于时间来的话,当静态资源文件被部署到某个节点上时,无法保证文件的时间戳保持不变,这样,对于同一个文件的请求,不同服务器可能返回不同的文件名

3、缓存失效的情况过多

使用指纹可以避免使用查询字符串的这些缺点,并且能够确保文件内容相同时文件名也相同。(指纹是根据文件内容来计算的)

猜你喜欢

转载自blog.csdn.net/csdn_yudong/article/details/83217212