Seajs禁用缓存

使用seajs模块化,因为浏览器缓存及seasj本身的缓存,调试代码时需要不停的刷新页面,不方便调试,可按如下方法在开发阶段让 浏览器缓存及seajs缓存失效,提高开发调试的效率。

我使用的版本为 seajs-debug.js  3.0.0

(1)修改 seasj-debug.js , 在seajs.use 上方添加 seajs.fetchedList变量、 seajs.removeCache 方法。

235115_Ckal_2242028.png

//add seajs.fetchedList by cccyb
seajs.fetchedList = fetchedList;
//add by cccyb remove Cache
seajs.removeCache = function(ids,require){
	if(S.Debug){
		if(isArray(ids)){
			for(var i = 0;i<ids.length;i++){
				// require时使用 require.resolve
				var url = require ? require.resolve(ids[i]) : seajs.resolve(ids[i]);
		    	delete seajs.cache[url];
		    	delete seajs.fetchedList[url];   
			}
		}else{
			// require时使用 require.resolve
			var url = require ? require.resolve(ids) : seajs.resolve(ids);
	    	delete seajs.cache[url];
	    	delete seajs.fetchedList[url];   
		}
	}
}

 

(2) sea.use 方法中调用seajs.removeCache()方法

235158_OYzQ_2242028.png

seajs.use = function(ids, callback) {
  // cccyb 移除缓存
  seajs.removeCache(ids);
	
  Module.use(ids, callback, data.cwd + "_use_" + cid())
  return seajs
}

(3)require(id)方法中调用seajs.removeCache()方法

232626_fZUQ_2242028.png

//cccyb
  function require(id) {
	// cccyb.删除缓存
    seajs.removeCache(id,require);
	  
    var m = mod.deps[id] || Module.get(require.resolve(id))
    if (m.status == STATUS.ERROR) {
      throw new Error('module was broken: ' + m.uri);
    }
    return m.exec()
  }

(4) require.async()方法中调用seajs.removeCache()方法

235306_cHZn_2242028.png

 require.async = function(ids, callback) {
	 // cccyb.删除缓存
	 seajs.removeCache(ids,require);
	  
    Module.use(ids, callback, uri + "_async_" + cid())
    return require
  }

(5) 请求js的url地址添加时间戳,此时IE8经测试会无法正常使用,如需要兼容IE8,可忽略该步骤,采用第6步

155311_SZvk_2242028.png

 addOnload(node, callback, url)
 node.async = true
 //node.src = url
    
 node.src = url + '?_' + new Date().getTime();

(6)服务端设置页面缓存失效,以java为例,添加一个过滤器设置response响应头

233032_HTPC_2242028.png

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		HttpServletResponse resp = (HttpServletResponse)response;
		if(PropSsfast.isDevMode()){
			resp.setHeader("Cache-Control","no-cache"); 
			resp.setHeader("Pragma","no-cache"); 
			resp.setDateHeader("Expires",0); 
		}
		
		chain.doFilter(request, response);
	}

 

效果:

155648_h3gR_2242028.png

可以看到重复的js文件每次都是重新请求加载。

转载于:https://my.oschina.net/cccyb/blog/873434

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值