【问题标题】:Leverage browser caching for some css and javascript file only仅对某些 css 和 javascript 文件利用浏览器缓存
【发布时间】:2015-08-06 09:01:07
【问题描述】:

有没有办法仅通过 htaccess 文件对某些 css 和 javascript 文件进行浏览器缓存? 我有三个 css 文件

http://www.example.com/css/main.css 
http://www.example.com/css/star_rating.css 
http://www.example.com/js/jquery.autocomplete.css 

"main.css" 可能会每天更新。我只想缓存 star_rating.css 和 jquery.autocomplete.css,而不是 main.css。我怎样才能做到这一点?

还有什么方法可以缓存 google adsense javascript 文件。

https://www.gstatic.com/swiffy/v7.1/runtime.js 
http://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js 
https://pagead2.googlesyndication.com/pagead/osd.js 

【问题讨论】:

  • 您可以考虑将get 数据添加到对main.css 的请求中并缓存它。类似...css/main.css?v=01 这样您可以通过更改v 数字来控制何时强制请求新文件。
  • @wiktus239:已知某些浏览器会在 url 中有查询参数时禁用缓存(可能是为了解决开发人员设置影响 ajax 数据的错误缓存规则时的错误)。最好的解决方案是将版本号放在 url 本身中:...css/01/main.css 并用户重写规则以将其指向正确的路径。

标签: javascript css .htaccess caching browser-cache


【解决方案1】:

在 .htaccess 中的 HTTP 响应中设置缓存控制标头,已在此处回答:How can i add cache control code to htaccess?

您将需要一个后续规则来将 main.css 的缓存间隔减少到您需要的任何值。但是,在您继续之前...

就我个人而言,我不会为如此复杂的粒度而烦恼,只需设置您的缓存时间,以便在典型的浏览会话(24 小时?)中只请求一次资源。尽管某些浏览器缓存可能相当大,但不能保证忙碌的用户在下次访问您的网站时仍会缓存您的资源,如果它们填满缓存,则将删除不频繁/过时的项目。

对于长期缓存策略,我只会检查 ETag 支持是否在您的服务器上运行。如果浏览器已经缓存了您的项目之一,它将请求“如果未修改”标头并提供它为您的资源保存的 ETag。

如果资源没有被修改(如果 ETag 值匹配),您的服务器将响应 304(未修改)而不是 200,这样可以节省大量资源。

如果热链接到 Google AdSense JavaScript 文件并且不自己托管它们,则您无法影响响应标头,但无论如何我期望它们应该具有合理的缓存控制标头(由 Google 设置)。

【讨论】:

    猜你喜欢
    • 2014-07-29
    • 2011-09-12
    • 2014-02-03
    • 2012-10-13
    • 1970-01-01
    • 2018-05-28
    • 2014-10-18
    • 2013-09-26
    相关资源
    最近更新 更多