首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jquery getScript缓存

Jquery getScript缓存
EN

Stack Overflow用户
提问于 2012-10-15 00:18:08
回答 6查看 24.6K关注 0票数 32

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

代码语言:javascript
复制
$.ajaxSetup({
    cache: true
 });

 $.getScript( scriptFile );

getScript检索的文件尚未编辑,请求是分开的页面更改。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-05-13 09:57:10

在这个问题发布的日期有一个错误,Firefox和Chrome都会声明一个脚本没有从Cache加载,而它确实是从Cache加载的。截至本文回答之日,这个问题仍然存在。最简单的测试方法是使用console.log并发送一个版本号。

要缓存一个动态加载的脚本,只需使用以下代码即可。

代码语言:javascript
复制
function onDemandScript ( url, callback ) {
    callback = (typeof callback != 'undefined') ? callback : {};

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

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

票数 10
EN

Stack Overflow用户

发布于 2012-10-15 03:08:24

首先,让我们弄清楚什么是jQuery禁用缓存。

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

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

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

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

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

用于汇总的

cache:true让浏览器从你发送的头文件中决定这个文件的缓存。

cache:false强制重新加载该文件。

一些与缓存相关的问题:

caching JavaScript files

IIS7 Cache-Control

测试内部代码

getScript()正在调用的jQuery.get()是的shorthand Ajax function

代码语言:javascript
复制
$.ajax({
  url: url,
  data: data,
  success: success,
  dataType: dataType
});

因此,通过调用getScript()进行ajax调用,jQuery不会为您的文件保留任何形式的缓存,如果您一开始就这么认为的话。

用于加载脚本自定义函数

如果您没有成功创建一个全局cache:true,并且您只需要使用cache:true加载一些文件,则可以将自定义函数设置为:

代码语言:javascript
复制
function getScriptCcd(url, callback)
{
    jQuery.ajax({
            type: "GET",
            url: url,
            success: callback,
            dataType: "script",
            cache: true
    });
};

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

票数 31
EN

Stack Overflow用户

发布于 2017-03-09 03:39:30

实际上,有一个更好的选择,您可以为某些请求打开缓存,例如:

代码语言:javascript
复制
$.ajaxPrefilter(function( options ) {
  if ( options.type==='GET' && options.dataType ==='script' ) {
      options.cache=true;
  }
});
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12884097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档