Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html “附加”是什么意思;?v=1“;要在链接和脚本标签中添加CSS和JavaScript URL吗?_Html_Css_Browser Cache - Fatal编程技术网

Html “附加”是什么意思;?v=1“;要在链接和脚本标签中添加CSS和JavaScript URL吗?

Html “附加”是什么意思;?v=1“;要在链接和脚本标签中添加CSS和JavaScript URL吗?,html,css,browser-cache,Html,Css,Browser Cache,我一直在看HTML5样板模板(来自),注意到在引用CSS和JavaScript文件时,URL中使用了“?v=1” 将“?v=1”附加到链接和脚本标记中的CSS和JavaScript URL上有什么作用 并非所有JavaScript URL都具有“?v=1”(以下示例中的示例:js/modernizer-1.5.min.js)。这有什么原因吗 来自其index.html的示例: 这可确保您从服务器获取最新版本的css或js文件 如果您有较新的版本和“?v=3”、“?v=4”等等,那么以后您可以追加

我一直在看HTML5样板模板(来自),注意到在引用CSS和JavaScript文件时,URL中使用了
“?v=1”

  • “?v=1”
    附加到链接和脚本标记中的CSS和JavaScript URL上有什么作用
  • 并非所有JavaScript URL都具有
    “?v=1”
    (以下示例中的示例:
    js/modernizer-1.5.min.js
    )。这有什么原因吗
  • 来自其
    index.html
    的示例:


    这可确保您从服务器获取最新版本的css或js文件

    如果您有较新的版本和
    “?v=3”、“?v=4”
    等等,那么以后您可以追加
    “?v=2”

    请注意,您可以使用任何
    查询字符串
    ,“v”不是必须的,例如:

    <link ... href="http://sstatic.net/stackoverflow/all.css?v=c298c7f8233d">
    
    “?blah=1
    ”也可以

    “?xyz=1002”
    将起作用


    这是一种常见的技术,因为浏览器现在可以更好、更长地缓存js和css文件。

    这些通常是为了确保当网站更新为新版本时,浏览器会获得新版本,例如,作为构建过程的一部分,我们会有如下内容:

    /Resources/Combined.css?v=x.x.x.buildnumber
    
    因为每次新的代码推送都会改变这种情况,所以客户端被迫获取一个新版本,这仅仅是因为查询字符串。查看此页面(在回答此问题时),例如:

    <link ... href="http://sstatic.net/stackoverflow/all.css?v=c298c7f8233d">
    
    
    
    我认为,与修订号不同,团队使用了文件哈希,这是一种更好的方法,即使是新版本,浏览器也只能在文件实际更改时才强制获取新版本


    这两种方法都允许您将缓存头设置为可笑的长度,比如20年……但当它发生变化时,您不必担心缓存头,浏览器会看到不同的查询字符串,并将其视为不同的,新文件。

    浏览器缓存Javascript文件的时间通常比您预期的要长得多

    当您发布JS文件的新版本时,这通常会导致意外行为


    因此,向javascript文件的URL添加QueryString参数是常见的做法。这样,浏览器将以v=1缓存Javascript文件。当您发布新版本的javascript文件时,您将url更改为v=2,浏览器将被迫下载新副本。

    当您想知道本地web文件夹中文件的版本时,哈希解决方案很好,但不是真正的人类可读的。解决方案是在您的版本上加盖日期/时间戳,以便您可以轻松地将其与服务器文件进行比较

    例如,如果您的
    .js或.css
    文件的日期为
    2011-02-08 15:55:30
    (上次修改),则版本应等于
    .js?v=20110208155530

    应易于读取任何语言中任何文件的属性。在ASP.Net中,它真的很容易

    ".js?v=" + File.GetLastWriteTime(HttpContext.Current.Request.PhysicalApplicationPath + filename).ToString("yyMMddHHHmmss");
    
    当然,首先要把它很好地重构成属性/函数,然后就可以开始了。别再找借口了


    祝你好运,阿特。

    为了回答你的问题

    “?v=1”这是为了下载css和js文件的新副本而编写的,而不是从浏览器的缓存中使用

    如果在样式表或js文件末尾提到此查询字符串参数,则会强制浏览器下载新文件,因此.css和.js文件中最近的更改在浏览器中生效

    如果不使用此版本控制,则可能需要清除刷新页面的缓存,以便查看这些文件中最近的更改


    这里有一篇文章解释了这一点

    在新版本的开发/测试过程中,缓存可能是一个问题,因为浏览器、服务器甚至有时3G电信(如果您进行移动部署)会缓存静态内容(例如JS、CSS、HTML、img)。您可以通过在URL中添加版本号、随机数或时间戳来克服此问题,例如:JSP:

    如果您运行的是纯HTML(而不是服务器页面JSP、ASP、PHP),服务器将不会帮助您。在浏览器中,链接在JS运行之前加载,因此您必须删除链接并使用JS加载它们

    // front end cache bust
    var cacheBust = ['js/StrUtil.js', 'js/protos.common.js', 'js/conf.js', 'bootstrap_ECP/js/init.js'];   
    for (i=0; i < cacheBust.length; i++){
         var el = document.createElement('script');
         el.src = cacheBust[i]+"?v=" + Math.random();
         document.getElementsByTagName('head')[0].appendChild(el);
    }
    
    //前端缓存中断
    var cacheBust=['js/StrUtil.js','js/protos.common.js','js/conf.js','bootstrap\u ECP/js/init.js'];
    对于(i=0;i
    正如您之前所读到的,v=1确保您的浏览器获得文件的版本1。当您有一个新版本时,只需附加一个不同的版本号,浏览器就会忘记旧版本并加载新版本


    有一个gulp插件,它在构建阶段负责文件的版本,因此您不必手动执行。它很方便,您可以轻松地将其集成到构建过程中。这里有一个链接:

    正如其他人提到的,它用于前端缓存破坏。为了实现这一点,我个人发现grunt cache bust npm包非常有用。

    具体是哪种浏览器?即使是最古怪的IE 5和IE 6也遵守缓存控制头。@Free-昨天发送的缓存控制头不能告诉客户端今天文件已更改(客户端甚至不会检查),URL可以。你能解释一下我遗漏了什么吗?@Free-这些文件的缓存方式是永久性的,这意味着客户端无法检查文件是否被修改。这意味着他们永远不会得到更新的文件…除非URL改变,这就是使用上述技术所发生的。客户机上的缓存寿命最长(HTTP请求最少),但当文件实际更改时,客户机会立即更新。确切地