小游戏性能优化笔记

时间:2024-04-02 16:01:17

       上次登录还在18年年初,至今近乎两年时间了。时间过了很久,知道的也相对多了些,可是却没有完完整整的记录过什么。学过的,用过的,也都是前用后忘,再用时,要重新费心查找一番。成长的路上,也还在原地踏步。

       针对最近接触最多,也最需要去解决的小游戏性能问题。根据自己的查找的资料和一些使用效果,做一些有用的记录,以便之后翻起时有一些记忆吧。

微信小游戏优化:CPU,GPU,IO和网络,内存使用率。

1:CPU:https://baike.baidu.com/item/%E4%B8%AD%E5%A4%AE%E5%A4%84%E7%90%86%E5%99%A8/284033?fromtitle=CPU&fromid=120556&fr=aladdin

 CPU主要用来做逻辑的计算之类功能。优化方向:如:数据缓存,异步计算数据(分帧或者多线程),合理使用算法和数据结构          等。

cup计算单位时间内计算量过大,会导致画面流畅性降低(跳帧);发热严重,耗电量高。

优化:分帧处理复杂的逻辑计算,避免短时间内的性能超过负荷。

         将可以缓存的数据尽可能的缓存起来,避免重复计算和重复分配内存。使用对象池,重复利用需要创建删除的节点。

         合理利用算法和数据结构。提高算法运行效率。(小优化:A/2 ==》A*0.5 ; 一个乘法的运算速度要近4倍快于除法的运行                速度)

2:GPU:https://baike.baidu.com/item/%E5%9B%BE%E5%BD%A2%E5%A4%84%E7%90%86%E5%99%A8/8694767?fromtitle=gpu&fromid=105524&fr=aladdin

GPU主要用来做图形界面的渲染操作。优化方向:如:优化美术资源,优化界面渲染节点(降低层级深度),优化图片格式等

gpu使用率过高,导致发热严重,耗电严重,fps 降低等。

优化:优化美术资源,合理制定图集。降低模型三角面数(3D中),合理使用粒子效果范围。

          优化节点树,降低节点数的层级深度,适当降低静态页面帧数(30),降低动画的复杂度。

           优化draw call ,界面窗口之外的图形,或者玩家看不到的UI,可以根据需要,设置关闭,降低渲染数量,降低draw call,

          使用批处理,打图集是一方面,还可以设置label 属性,batching ,静太生成位图和动态生成位图两种(根据label文否 静             态来选择)。以此使得sprite和label可以批处理。label 对打断sprite的批处理。

3.IO和网络    网络请求和资源数据加载

优化方向:异步加载资源,分帧对网络进行处理,限制发包频率,适当拆包或者合包。

同步请求或者频繁请求,会导致网络延迟甚至掉线,加载资源导致掉帧,加载资源等待时间过长。

优化:使用独立线程进行加载。 减少网络包里的冗余数据。合并小包减少请求数据次数。分帧对回包进行处理,限制一定时间内的发包频率。

4.内存: 内存使用过多不卸载会大招游戏崩溃(闪退,卡死)之类问题。

优化方向:动态加载和卸载资源,合理规划美术资源。

优化:动态加载和卸载资源。降低资源质量(压缩资源),降低分辨率之类。

 

5: 微信小游戏中和手Q之中。

   A: 包体限制大小,可以有三种解决方案。(分包加载,使用远程服务器存放资源,网络下载资源,压缩图片)

   B:降低draw call,减少节点层级深度,尽量使sprite 或label 相同UI组件相邻渲染,(间隔渲染,会打断批处理)。静态label可以使用bitmap 属性,动态变化label ,根据文字内容是否变化频繁或者内用多样,使用char属性。(批处理)

  C :图集打包。尽量将大小相近且规则的图片打包的同一个图集中,大图根据需要,选择是否打包。

  D:避免try catch 的使用,会大大的增加性能消耗。

 E:九宫格处理通用背景图片,可以减少多个图片资源。

 F: mask 组件会打断批处理 。

G: 关于微信子域问题,可以使用原生开发子域,避免新建子域工程,导致包体大小的增大。(优化近1M的子域空间)。

 

 

 

 

 

小游戏性能优化笔记