【问题标题】:caching js and css files [duplicate]缓存js和css文件[重复]
【发布时间】:2014-10-15 19:40:12
【问题描述】:

我注意到许多网站的jscss 文件都附加了GET 参数。所以文件变成这样:path/to/my.css?v=49path/to/my.js?v=1.4

我做了一些研究,了解到它用于文件缓存,因此浏览器不会在每次请求时再次下载文件。我试图了解它的工作原理,但老实说,我不知道。

我看到一些帖子说您告诉浏览器每隔几分钟下载一次新文件,但我认为这可能有点棘手,因为如果我推动重大更改(甚至是关键错误修复) 以及它试图访问该网站但他的浏览器仍在使用缓存文件的用户,即使修复了该错误,他也无法访问它。他将不得不等到他的浏览器从服务器中提取新文件而不是使用缓存版本。 (显然我假设用户不知道什么时候会推送 bug 修复,什么时候浏览器会拉取新文件,或者如何在不等待浏览器的情况下手动拉取新文件。)

我想了解该缓存方法以及如何克服上述问题。

【问题讨论】:

    标签: javascript php css caching


    【解决方案1】:

    将这样的参数添加到文件将导致浏览器重新下载。通过更改“关键修复”上的参数,您将实现每个客户端重新下载文件,即使已缓存。

    您可以通过给文件一个随机参数来强制每次重新加载时下载。请注意,这会增加您的流量和加载时间。

    <link rel="stylesheet" type="text/css" href="style.css?v=<?php echo rand(); ?>" />
    

    【讨论】:

    • 是不是意味着浏览器会自动缓存css/js文件,不会每次请求都下载?
    【解决方案2】:

    这是非常简单的机制。每次更改 js 或 css 文件时都必须更改此“v”参数。

    您可以在此处阅读如何自动执行此操作:http://www.codeproject.com/Articles/203288/Automatic-JS-CSS-versioning-to-update-browser-cach

    【讨论】:

    • 感谢您的回答。默认情况下,服务器将缓存文件多长时间?
    • 服务器端没有任何默认的缓存时间,你必须使用特定的机制,但是服务器可以例如设置标头 Cache-Control 并告诉所有代理和浏览器缓存响应的最大年龄是多少(更多:mnot.net/cache_docs/#CACHE-CONTROL
    猜你喜欢
    • 1970-01-01
    • 2012-08-13
    • 2011-11-01
    • 2020-06-07
    • 1970-01-01
    • 2012-05-27
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    相关资源
    最近更新 更多