Jquery getScript缓存

Cas*_*ase 28 javascript jquery getscript

默认情况下,$ .getScript()禁用缓存,您可以使用$ .ajaxSetup并将缓存设置为true.当测试脚本是否实际上是用Firebug缓存时,脚本大部分时间都会返回200(这意味着脚本是一个新的副本),一个可能20或30次,它将返回304(意味着它使用了缓存)版).为什么绝大部分时间都会收到新版本?

$.ajaxSetup({
    cache: true
 });

 $.getScript( scriptFile );
Run Code Online (Sandbox Code Playgroud)

尚未编辑getScript检索的文件,并且请求是页面更改.

Ari*_*tos 26

首先让我们澄清一下jQuery禁用缓存的含义.

当jQuery 禁用缓存时,意味着强制文件由浏览器以某种技巧再次加载它,例如通过在URL的末尾添加一个额外的随机数作为参数.

当jQuery 启用缓存时,不强制执行任何操作,并让您在此文件的标头上设置缓存.这意味着如果您没有设置文件参数的标题以将其保留在浏览器缓存中,浏览器将尝试通过某些方法再次加载它.

因此,通过jQuery启用缓存,您还必须在静态文件上设置正确的缓存头以保留在浏览器缓存上,否则浏览器可能会尝试再次加载它们.

对于浏览器在标题上看到创建日期的文件,然后连接到服务器再次询问标题,比较它,如果没有更改,则不再加载它,但是对服务器进行一次调用.

对于已设置最大年龄的文件,并且在该日期之前不询问服务器,则浏览器会在找到它时直接从缓存中加载它.

总结:
cache:true是让浏览器决定从您发送的头文件的缓存.
cache:false是强制文件再次成为负载.

一些相对于缓存的问题:
缓存JavaScript文件
IIS7 Cache-Control

里边反内码
getScript()呼唤着jQuery.get()女巫是简写的Ajax功能

$.ajax({
  url: url,
  data: data,
  success: success,
  dataType: dataType
});
Run Code Online (Sandbox Code Playgroud)

因此,通过调用getScript()你进行ajax调用,jQuery没有保留文件的任何缓存,如果这是你首先想到的.

用于加载sripts的自定义函数
如果您没有赢得全局缓存:true,并且您只需要使用cache:true加载某些文件,则可以将自定义函数设置为:

function getScriptCcd(url, callback)
{
    jQuery.ajax({
            type: "GET",
            url: url,
            success: callback,
            dataType: "script",
            cache: true
    });
};
Run Code Online (Sandbox Code Playgroud)

这不受全局缓存参数的影响,并且加载脚本文件而不添加任何非缓存参数.


Cas*_*ase 9

发布此问题的日期出现错误,其中Firefox和Chrome都会声明脚本未从Cache加载.截至本答复之日,此问题仍然存在.最简单的测试方法是使用console.log并发送版本号.

要缓存动态加载的脚本,只需使用以下代码即可完成.

function onDemandScript ( url, callback ) {
    callback = (typeof callback != 'undefined') ? callback : {};

    $.ajax({
         type: "GET",
         url: url,
         success: callback,
         dataType: "script",
         cache: true
     });    
}
Run Code Online (Sandbox Code Playgroud)

对于开发,您应该注释掉cache:true.