javascript - requirejs 缓存问题

查看:152
本文介绍了javascript - requirejs 缓存问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

requirejs缓存问题比较严重。
加上

requirejs.config({
    urlArgs: "bust=" +  (new Date()).getTime()
});

之后,缓存没有了,相当于所有js都加了这个,但是这样缓存没有,每次都需要请求。

如果不加,假如a.js b.js c.js三个文件,a.js修改了,b.js c.js没有修改。这样请求的时候,刚刚修改的a.js是之前的缓存文件。怎么解决呢?

解决方案

修改了requirejs的源码,然后问题解决了。
在对应的位置添加如下代码:

if(typeof a.urlArgs==='function'){
    var b=a.urlArgs();
    a.urlArgs=function(a,c){
        var jsFileName=c.substr(c.toString().lastIndexOf('/')+1);
        if(jsFileName in b){
            return(-1===c.indexOf("?")?"?":"&")+"bust="+b[jsFileName];
        }    
        else{
            return(-1===c.indexOf("?")?"?":"&")+"bust="+'yhpz000'
        }
    }    
}        

然后在底部写入:

function setMoudlesBust(reditMoudles){
    var reditMoudles= reditMoudles ? reditMoudles : requirejs.yhpzReditJs;
    return reditMoudles;
}
requirejs.yhpzReditJs={    
    'special.js':'5648678',
    'submit.js':'5648678',
    'ticket.js':'5648678'
};
requirejs.config({
    urlArgs:  setMoudlesBust
});

requirejs.yhpzReditJs这个里面写的是所有js文件的名字及版本号,如果修改了某js文件,需要修改下版本号。

整体上算是解决了,项目小。

这种解决方法存在的问题:
1,版本号需手动更改,比较麻烦。
2,文件存在重命名问题。比如a目录下的touch.js 跟 b目录下的touch.js,这个会存在问题。
3,这个修改方案需要单独列出来,成为一个模块。然后单独调用。

这篇关于javascript - requirejs 缓存问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆