【问题标题】:Is php's `filemtime` a good idea for Browser Caching or Cache Busting?php 的 `filemtime` 是浏览器缓存或缓存破坏的好主意吗?
【发布时间】:2019-12-10 10:43:05
【问题描述】:

我正在使用 php 的 filemtime 向文件添加版本,这是个好主意吗?

<link rel="stylesheet" href="css/custom.css?v=<?=filemtime("./css/custom.css")?>"/>
<script src="js/custom.js?v=<?=filemtime("js/custom.js")?>"></script>

这会在源代码中显示

<link rel="stylesheet" href="css/custom.css?v=1564681659"/>
<script src="js/custom.js?v=1564599819"></script>

?v?ver 是一样的吗?

P.S:我对 .js 和 css 文件、bootstrap、jquery 等也做同样的事情(虽然都是本地的)。

【问题讨论】:

  • 当您修改文件的内容而不是文件名时,不要试图找出各种破坏缓存的方法,只需使用不同的文件名即可。而已。字面意思就是这样。这就是它应该如何工作的方式。一切都神奇地到位。

标签: php caching browser-cache


【解决方案1】:

来自HTML5 ★ Boilerplate Docs

什么是 ?v=1" '?v=1' 是 JavaScript/CSS 版本控制 缓存破坏

为什么需要缓存 JavaScript CSS?网页设计越来越 越来越丰富,这意味着更多的脚本和样式表在 页。首次访问您的页面的访问者可能需要创建几个 HTTP 请求,但是通过使用 Expires 标头,您可以创建这些组件 可缓存的。这避免了后续页面上不必要的 HTTP 请求 意见。过期标头最常用于图像,但它们 应该用于所有组件,包括脚本、样式表等。

HTML5 Boilerplate 如何处理 JavaScript CSS 缓存? HTML5 Boilerplate 附带服务器配置文件:.htacess, web.config 和 nginx.conf。这些文件告诉服务器添加 JavaScript CSS 缓存控件。

什么时候需要将版本控制与 cachebusting 结合使用? 传统上,如果您使用遥远的未来 Expires 标头,您必须 每当组件更改时更改组件的文件名。

如何使用缓存清除?如果您更新 JavaScript 或 CSS,只需 将 "?v=1" 更新为 "?v=2", "?v=3" ...这会欺骗浏览器 认为您正在尝试加载新文件,因此,解决缓存 问题。

话虽如此,您可以使用各种东西来对文件进行版本控制。使用filemtime 是一个很好的方法。我相信这是我见过人们使用的最主流的方式之一。您可以离开它,并且知道它会始终正常工作,并且不会很快发生冲突。我不知道?v?ver 之间有什么区别,但?v 是我见过的90% 的案例中使用的那个,也许更多。希望这会有所帮助。

【讨论】:

  • 感谢您的回答,但您的意思是不会发生冲突anytime soon
  • @RobotBoy 这是一个比喻。你不应该担心这个。通过使用时间戳,您可以确保它始终是一个比以前更高的数字,而无需真正做任何复杂的事情。
猜你喜欢
  • 2018-09-02
  • 1970-01-01
  • 2011-03-06
  • 2017-01-13
  • 2020-02-26
  • 2012-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多