版本2.4.11
构建勾选 和不勾选 MD5 Cache,这个会影响什么?
只看到文档中说明要勾选 MD5 Cache,没看到解释原因,请问 这个有什么影响?
对应远程资源管理的方式 如果没勾选,是否会影响资源更新的操作?
勾选了会根据MD5值更新缓存文件,不勾选的话比如你更新了一张图片,但是别人打开还是显示缓存里的老图片。
和http缓存有关,md5值会加到文件后面,如果内容改变了,md5会变,当http请求时,如果文件名不变有可能会直接取http缓存的内容导致内容没更新
但一般来说 你版本更新了,远程地址应该对应不同的连接了吧要,那么就算是文件名相同,但连接不同了 那么一定也会重新下载的 只要引擎认为这个文件需要下载的,所以 我认为这个MD5的影响 应该是不存在的,当然 我说的是我假设的这种情况下
如果你这么做的话确实没有影响,但你这样做的话http缓存机制也失效了,之前下载好的文件也都得重新下载了
这个,我认为有出入,我认为不应该会重新下载,比如你一共有10个资源 版本1时候都下载全了 ,到了版本2 更新了其中1个资源 那么其他9个资源会如何 对吧?引擎肯定知道应该需要重新下载这1个的要 所以它就下载这一个,其他9个 都在本地缓存里 它就不去下载了 ,我认为引擎判断某个资源是否需要下载 不是看文件名 而是文件本身的MD5,不勾选 MD5 Cache构建的情况下 资源目录里的那些配置文件 也有对应的MD5值,所以我认为 不会下载没变化的东西
微信小游戏上判断一个文件是否存在是通过url判断的,你换了一个新路由,那么判断的就是两个不一样的文件,你可以看 platforms\minigame\common\engine\AssetManager.js 这个脚本
url 的拼接在 url-transform 的 combine 方法
可以自己加版本号,不需要MD5.
按这个规则 我觉得这会有个问题的,你是说要保证每个版本远程资源的地址必须一样才行了吧,那么如果一样,会导致你提交审核的版本和当前版本的资源 冲突了就,
比如你当前版本 运行正常,你要更新一个版本 你得覆盖外网的资源包吧 因为需要审核的,你审核版本没问题了 但当前版本 不就有可能出问题了吗,比如审核期间有人下载了当前版本 运行,本版不匹配的了,
所以 你们是怎么处理这个问题的?
暂时的方案是不删除旧资源,以覆盖的形式在同一个目录。如果流量不大的话,不同版本不同目录也可以,但是也建议开启md5cache,因为在测试时是不会变更版本号的。分析过几个热门游戏,有的是分目录有的不分目录,你可以通过fiddle截包看
更在意稳定性的话也可以分目录
这个我测了一下大概 确实是外网地址一变 之前已有的文件缓存就失效了
你是说 你们的方式就是外网地址是不变的形式了? 所以有冲突的几率其实,当然可以忽略 估计几率不是很大会应该,
但外网地址不同的话 那妥妥的 之前缓冲的资源就都作废了要,得重新下载一遍了要
所以 我觉得COCOS 对于小游戏的资源更新 比原生平台的热更新规则要差一些,原生平台是以某个资源本身的MD5为基准 不以外网地址为准,小游戏 还是支持有点不到位啊
我不是很理解你的冲突指的是什么,如果你怕修改了资源,会覆盖原有文件,那基本不会有这个问题,因为文件命名规则位 uuid.md5.ext,你修改了文件的话md5值是会变的。
如果是怕提交了审核版本而怕玩家下载不到旧资源的话,我的方法是覆盖旧文件夹,比如一个文件更新了了,同时保留新旧两个版本的文件在同一目录下
其实你可以把小游戏理解为一个另类的网页版本,原生是自己比较清单文件,来决定哪些下载哪些不下载,而网页是通过 http 直接从网络上获取资源,缓存策略由http决定
明白了 你是说,不管是新增的文件 还是修改了已有的文件 ,因为勾选了MD5 那么打包后 这些变化的资源都是变成了新的打包后的目录下import native里新的JSON和资源文件本身,所以旧版本的打包资源 其实不受影响了 ,所以远程资源 新版本的remote目录 直接覆盖到旧版本的remote目录上就是了 是这个过程吧? 那么地址不变 缓存就继续生效了能
恩,别删就行
那就是一个remote文件夹,不停的覆盖吗,如果提审的版本资源出问题,会影响到线上吗。如果一个版本一个目录的话,我现在还发现另一个问题,就是缓存会不停的变大,如果超出缓存大小,不知道是按什么规则删除旧资源的
我三年前的时候直接覆盖md5,好像md5不会生效,现在不知道会不会了,当时是每次更新都刷一下cdnn。其实正常情况就是直接覆盖新版本就行了吧,新旧版本都会同时存在