当前位置: 首页 > news >正文

H5游戏性能优化系列-----配置相关优化

配置文件这块儿还是有很多地方可以说道说道的,大部分前端同事可能进项目组的时候主程已经搞好了配置文件的全套流程,对于配置文件的一些细节可能了解的不多,这里就把我能想到的一些点列出来

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

http://www.rkmt.cn/news/2244.html

相关文章:

  • Codeforces Round 1049 (Div. 2) E
  • 批量设置Excel样式格式(如:纸张大小,排版,字体等)+ 支持windows系统
  • 张瑜:牛市进程之十大观察指标 - Leone
  • Windows 11 系统优化
  • 碎碎念(十六)
  • RK3588+xenomai3+ethercat搭建
  • 【已解决】git push 问题 send-pack: unexpected disconnect while reading sideband packet
  • Adobe Lightroom Classic 2023 中文破解版:摄影师必备的 RAW 图像处理神器(附安装指南)
  • start.bat
  • 外泌体适配体筛选的 SELEX 技术:5 大核心方法拆解,精准捕捉 “细胞信使”
  • 知识点 AlexNet(2/8)
  • QtCreator问题输出框 MSVC编译出现中文乱码报错
  • Gitee DevOps本土化实践:为中国开发者打造全流程效能引擎
  • macbook pro2012怎么安装windows系统
  • Cloud Foundation Kit启动预加载,赋能喜马拉雅秒启秒开流畅体验
  • 领嵌iLeadE-588网关全新一代Alot高端应用芯片支持二次开发
  • Gitee Wiki:重塑关键领域软件研发的知识管理新范式
  • 解决 windows远程桌面报错“CredSSP加密数据库修正”
  • 【科普系列】隐藏在OSI模型里的“交通指挥员”——UDS会话层
  • H5游戏性能优化系列-----总纲
  • 阿里云边缘安全加速ESA保障服务安全
  • rancher服务启动失败
  • C# Web开发教程(四)
  • HarmonyOS运动开发
  • 【2025-09-09】家庭决策
  • 多变量递归-全排列问题
  • Gitee DevOps:中国开发者效率革命的本土化解决方案
  • fastapi
  • Oracle主键primary key
  • Kubernetes标签(Label)