使用查询字符串使缓存失效,这是不好的做法吗?

问题描述 投票:0回答:3

在我制作的网站上,我通常使用查询字符串参数使 CSS 和 JS 的缓存无效,如下所示:

Image

注意:这是 chrome 检查器的屏幕截图,这些查询字符串都是由我在渲染到浏览器中时制作的一个小系统自动附加的。

一位朋友现在告诉我,使用查询字符串的缓存不如更改文件名本身或文件名之前的路径中的某个位置好。他还发送了一篇文章,在这里他们主要讨论人们使用代理时的不良性能。

然而,这篇文章已有8年历史了。我想知道,这仍然是一个有效的观点吗?我应该关心吗?这真的是一种不好的做法吗?

javascript css caching
3个回答
7
投票

确实,查询字符串缓存失效并不是最佳实践。在某些情况下它不起作用...某些浏览器(据说),并且您的 CDN 可能会设置为忽略查询字符串(提供相同的服务)文件)。但这并不意味着它对开发工作流程无效或不能作为解决问题的快速解决方案。

有些人强烈认为查询字符串不够好。对于专业站点(尤其是持续集成)您应该使用基于上次更新日期或文件内容哈希的文件名。

主题链接...


4
投票

使用查询字符串使缓存失效是完全可以的。正如我在评论中指出的:

  1. 没有任何权威机构表明这是错误的。
  2. Google、Amazon 和大多数 CDN 在其网站上都有一个关于如何执行此操作的部分。例如:https://cloud.google.com/cdn/docs/cache-invalidation-overview
  3. 这个网站(stackOverflow)使用了这种技术。如果您查看此页面的源代码,您将看到:
    <link rel="shortcut icon" href="...favicon.ico?v=ec617d715196">

我发现的唯一问题是 Squid 缓存(不是浏览器)默认配置为不缓存动态内容。此默认值已于 2008 年更改(固定)。

参见:通过参数进行缓存清除


-1
投票

如果您当前正在开发网站,那么您将真正利用附加到资源链接的随机查询字符串。喜欢

<a href="header.js?noCache=<?= time(); ?>">

但是您已经说过,这已经工作了 8 年,所以缓存一些资源也许是件好事?

是的,非缓存版本的运行速度会比缓存版本慢。

© www.soinside.com 2019 - 2024. All rights reserved.