配置文件这块儿还是有很多地方可以说道说道的,大部分前端同事可能进项目组的时候主程已经搞好了配置文件的全套流程,对于配置文件的一些细节可能了解的不多,这里就把我能想到的一些点列出来 H5游戏配置文件最常用的可能是从excel导出为json配置,这里就拿Excel表转json为例子, 假设excel每一
配置文件这块儿还是有很多地方可以说道说道的,大部分前端同事可能进项目组的时候主程已经搞好了配置文件的全套流程,对于配置文件的一些细节可能了解的不多,这里就把我能想到的一些点列出来
H5游戏配置文件最常用的可能是从excel导出为json配置,这里就拿Excel表转json为例子, 假设excel每一列表示一个数据字段
配置文件打包工具相关
- excel里面的众多字段,有些字段是后端字段,有些是策划做备注的,有些是前端使用的字段,这个时候导表工具必须支持按需导出,以减少最终json的大小
- 假设道具表有itemId, desc, 导出的json每一行数据应该是{itemId: xxx, desc: "xxxx"}, 这个字段名是否是必须的呢?其实可以精简成[xxx, "xxx"]这种数据的紧凑形式,按照数组的方式去索引对应列的数据,而不是key-value形式,这样也能减少最终json的大小
- 每一行数据如果导出成数组的形式,需要同步导出字段的enum,避免使用0,1,2这种魔法数字去索引对应字段
1 const enum ItemField{ 2 itemId = 0, 3 desc = 1, 4 } 5 6 //在道具表某一行的数组获取对应字段就是 7 array[ItemField.itemId] 8 array[ItemField.desc]
- 随着功能的开发,配置表越来越多,导出的json,最终应该合并成一个文件,避免进游戏的时候发起了N多个请求去加载配置文件
- 配置文件最好能加上校验相关处理,比如A表的某个字段是B表的主键,这种加上校验避免策划只配置了A表,但是这个字段对应的信息在B表不存在
配置文件使用相关
- 配置文件对于大多数游戏来说,是要在预加载阶段就必须要全部加载的,比如刚进游戏就要扫描红点,极大可能性就要使用对应的配置文件,所以配置文件一般放在预加载
- 虽然配置文件在预加载时一次性加载,但是不一定加载完就立马全部展开成json, 全部展开会导致内存暴涨,我们可以对每个excel导出的json进行第一层的压缩成二进制,然后把这N多个二进制合并成一个大的二进制包作为最终的配置包,游戏预加载阶段加载到配置文件之后先进行最外层的二进制解包,实际后续用到某个具体的配置表时再解包第二层,得到某个表的具体配置,这样就防止在预加载阶段全部展开
//假设我们用zlib处理压缩 //导表工具处理示意 item表 -> item.json -> zlib压缩-> item.obj equip表 -> equip.json -> zlib压缩 -> equip.obj ... //最终输出 config.obj这个就是我们的总配置 item.obj + equip.obj + ... -> zlib压缩 -> config.obj //实际使用 预加载config.obj -> zlib解压缩得到一些利配置表的二进制 用到某个具体表的时候 ,找到对应表的二进制 -> zlib解压缩
- 第一层的zlib解码,可以放在woker中处理,如果支持worker的话
- 第二层如果觉得zlib耗时,可以用轻量级的库比如msgpack等等库
- 预加载阶段加载到总配置的二进制包,进行zlib解压缩之后,原始的资源就可以立马释放了,避免占用双份内存
后话
自己写个导表工具无非是时间问题,主要是用到的excel的读写库。
市面上有成熟的导表工具可以参考:鲁班配表,很强大支持导出多种数据格式,地址:https://github.com/focus-creative-games/luban
未经允许不得转载作者:
WAP站长网,
转载或复制请以
超链接形式
并注明出处
WAP站长网 。
原文地址:
《
H5游戏性能优化系列》
发布于
2025-9-11
评论 抢沙发
评论前必须登录!
立即登录 注册