javascript - Jquery getScript 缓存

标签 javascript jquery getscript

默认情况下 $.getScript() 禁用缓存,您可以使用 $.ajaxSetup 并将缓存设置为 true。当测试脚本是否确实使用 Firebug 进行缓存时,大多数情况下脚本会以 200 返回(这意味着该脚本是一个新副本),并且大约有 20 或 30 次会返回 304(这意味着它使用了缓存)版本)。为什么大多数时候它都会获得新副本?

$.ajaxSetup({
    cache: true
 });

 $.getScript( scriptFile );

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

最佳答案

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

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

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

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

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

对于您设置了最大期限的文件,并且在此日期之前不询问服务器,那么浏览器如果找到它,将直接从缓存中加载它。

总结:
cache:true 让浏览器根据您发送的 header 决定该文件的缓存。
cache:false 强制再次加载文件。

一些与缓存相关的问题:
caching JavaScript files
IIS7 Cache-Control

内部代码
getScript() 正在调用 jQuery.get() 女巫是 shorthand Ajax function

$.ajax({
  url: url,
  data: data,
  success: success,
  dataType: dataType
});

因此,通过调用 getScript() 您可以进行 ajax 调用,并且 jQuery 不会保留任何类型的文件缓存(如果您一开始是这么想的)。

加载脚本的自定义函数
如果您不想创建全局cache:true,并且只需要使用cache:true加载一些文件,您可以创建一个自定义函数:

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

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

关于javascript - Jquery getScript 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12884097/

相关文章:

javascript - 自动制表符不适用于中间的文本?

javascript - 为什么 WordPress 中的排队脚本不起作用?

javascript - 滚动浏览 Chrome 中的某个部分时,jQuery Waypoint 粘性菜单出现闪烁问题

javascript - typescript 内的 Angular 4.3(点击)语法

javascript - 如何通过javascript获取列中<a>的值

javascript - swapCache() 上的 DOM 异常错误 11

javascript - 我将如何强制更新 div 内容可编辑?

jquery - 发生parsererror时,在jQuery .getScript函数中查找错误行?

jQuery。如何执行从 JSON 加载的脚本?