@fyhxyx 写道:
目前引擎其实已经做了一个按照时间戳更新的方案,在 init 的 config 里面传入 noCache: true,但这样每次刷新都强制更新不太友好,下面提供一种方法根据版本更新
在creator的安装目录下,CocosCreator\resources\engine\cocos2d\core\load-pipeline,downloader.js里有downloadImage函数,进行下载图片资源。text-downloader.js里进行下载json资源,里面的代码都使用了urlAppendTimestamp函数
function downloadImage (item, callback, isCrossOrigin) {
if (isCrossOrigin === undefined) {
isCrossOrigin = true;
}var url = urlAppendTimestamp(item.url);
...
text-downloader.js
var url = item.url,
xhr = cc.loader.getXMLHttpRequest(),
errInfo = 'Load ' + url + ' failed!',
navigator = window.navigator;url = urlAppendTimestamp(url);
在utils.js中,可以看到,如果启用noCache则将url加上了当前时间戳
urlAppendTimestamp: function (url) {
if (cc.game.config['noCache'] && typeof url === 'string') {
if(_noCacheRex.test(url))
url += '&_t=' + (new Date() - 0);
else
url += '?_t=' + (new Date() - 0);
}
return url;
}那么根据版本更新就容易了
首先在main.js或者其他地方,赋值cc.game.config['myversion']='1.0.0.1';cc.game.config['noCache']=true;
然后修改
urlAppendTimestamp: function (url) {
if (cc.game.config['noCache'] && typeof url === 'string') {
if(_noCacheRex.test(url))
url += '&_t=' + cc.game.config.myversion;
else
url += '?_t=' +cc.game.config.myversion;
}
return url;
}(这里我直接找到cocos2d-js-min.js里urlAppendTimestamp进行修改的,修改引擎文件好像要重新生成,麻烦就没弄)
这样访问就带有版本号,发布新版只要修改版本号即可全部更新图片和json资源图片使用CDN
由于项目需要,需要结合PHP使用,图片资源需使用CDN上的路径,不能整站放CDN上
同样,先修改downloadImage函数
在设置url后加上if(url.indexOf("http")<0){//防止本身需下载其他路径的头像资源
url="http://downloads.xxx.com/h5/"+url;
}json资源同样处理(修改text-downloader.js)
我使用的阿里的CDN,需要在域名CDN管理里面设置
希望creator在工具里面能实现noCache和根据版本号更新的功能
帖子: 1
参与者: 1