一:热更工具的设计
1:补丁生成原理
- 遍历所有文件,为每个文件生成md5码并记录
- 当次生成的md5文件和上次md文件对比,找出差异文件
- 差异文件依目录拷贝出来
2:补丁热更原理
laya本地缓存策略:缓存最近50m,当到达临界值时删除最先5m
laya版本管理策略:发布时所有资源重新命名(名字+hashcode)保证和上次不重复,生成version.json记录原有资源和新资源映射关系,读取资源时通过原资源名映射获取新资源,本地资源热更通过与上个资源名不一致实现本地资源热更
3:工具设计
- 遍历所有文件,生成md5码并记录文件,生成version.json,其中新资源的命名使用md5码
- 对比上次生成md5文件,找出差异文件,生成补丁,补丁里的文件使用md5码命名
- Version.json不使用本地缓存策略,每次加载都是从服务器加载version.json,资源读取和缓存都是用version.json映射后的名字
- 被热更后的资源一般会被laya的资源缓存策略移除,所以不用担心资源涌余
二:代码混淆工具的设计
1:生成不可混淆关键字:
- 混淆文件里的字符串(全部提取出来
- 系统关键字
- 库文件里所有字符,配置表键
2:生成关键字转换关系
- 查找混淆文件里所有字符
- 通过与不可混淆关键字对比,找出可被混淆的关键字
- 通过字符长度和使用频率对关键字排序
- 特定算法算出最短被替换关键字生成替换字典
- 使用正则表达式完成替换
三:配置表打包的设计
原有问题:
1.必须合表,减少io次数
合表 意味着需要每次生成配置都要读取所有表生成合并成一张表,但是这样会相当耗时,分 析耗时主要是库文件解析配置表时的消耗,占到90%以上
2.生成的json合表文件太大
解决方案:
1:每次导表为配置生成表的解析文本文件,表的合并其实就是所有文本文件的合并(文本文件的解析速度远远快于库文件解析解析配置表的速度
2:数据以数组的形式存取,即所有key都被省略,在游戏开始的时候去一一解析
再使用zlib库对文件进行压缩
测试:以18张表做测试发现
1:不合并直接生成json表的情况下文件总大小为2.8m
2:合并json并删除多余字符紧密排列时文件大小为2.3m
3:使用排除key的数组方式存储,文件大小为917k
4:使用zlib库对文件进行压缩,文件大小为194k
对比合并后的json文件的压缩率在90%以上