Quantcast
Channel: Cocos中文社区 - 最新主题
Viewing all articles
Browse latest Browse all 88737

h5游戏缓存根据版本全更新

$
0
0

@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

阅读整个主题


Viewing all articles
Browse latest Browse all 88737

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>