当前位置: 首页 > 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.wxhsa.cn/company.asp?id=932

相关文章:

  • 300 毫秒生成情感 AI 视频,Nuance Labs 获千万美元融资;AirPods Pro 3 将集成实时语音翻译丨日报
  • 认知引擎:企业下一个决胜分水岭
  • node.js安装地址
  • 【已解决】git Encountered 3 file(s) that should have been pointers, but werent
  • 接雨水-leetcode
  • Codeforces Round 1049 (Div. 2) E
  • ES深度分页优化
  • 2025年8月国产数据库大事记:东莞银行1078万采购OceanBase、821万采购腾讯TDSQL,2025上半年达梦净利2亿、金仓净利润飙升……
  • VSCode安装Jupyter的常见问题
  • 批量设置Excel样式格式(如:纸张大小,排版,字体等)+ 支持windows系统
  • 张瑜:牛市进程之十大观察指标 - Leone
  • QT-控件使用-获取lable标签宽高尺寸设置图片
  • 初识python:一些基础的知识(推导式)
  • RK3588+preemrt+ethercat搭建
  • Windows 11 系统优化
  • 碎碎念(十六)
  • PK-2600-ALG-2 三同轴转鳄鱼夹测试线应用案例
  • RK3588+xenomai3+ethercat搭建
  • 从英伟达到国产算力:一场必须打赢的“迁移之战”
  • 小说写法分析-个人随记
  • Nuget的不是所配置的源之一
  • part 3
  • 微服务高可用高并发方案
  • Adobe PDF Reader实现旋转PDF功能
  • start.bat
  • 外泌体适配体筛选的 SELEX 技术:5 大核心方法拆解,精准捕捉 “细胞信使”
  • 知识点 AlexNet(2/8)
  • QtCreator问题输出框 MSVC编译出现中文乱码报错
  • Gitee DevOps本土化实践:为中国开发者打造全流程效能引擎
  • pip安装临时使用清华源