微信小游戏性能优化
| 导语【整合cocos博客、微信小游戏及laya性能优化官方文档总结并实践】业务中实践cocos导出的微信小游戏性能优化案例,希望对大家有所帮助~
- 一、背景
- 二、性能优化过程(通用)
- 1、场景优化策略
- 2、图集批次合并
- 1)静态图集
- 2)动态图集(包括文字)
- 3、prefab优化
- 4、代码体积
- 5、资源纹理压缩
- 6、减少try catch的使用
- 7、垃圾回收
- 8、减少 Mask 组件数量
- 9、借助cocos插件
- 三、性能优化过程(代码逻辑)
- 1、游戏中多球碰撞检测
- 2、首页关卡数据展示
- 四、测试性能工具
- 1. cocos 浏览器运行查看调试信息
- 2. 微信小游戏真机调试工具
- 1) 微信开发者工具Performence与Memory
- 2) Android真机性能工具
- 3) PerfDog
- 3. 微信小游戏云测试(推荐)
- 五、微信小游戏跑分优化
- 1、启动
- 1)数据预拉取
- 2)小游戏测速
- 3)引擎分离
- 4)代码依赖
- 2、网络性能
- 1)数据周期性更新
一、背景
业务中实践cocos导出的微信小游戏性能优化 优化前后对比
二、性能优化过程(通用)
参考 laya官方性能优化指南:https://ldc2.layabox.com/doc/?nav=zh-ts-2-2-1 cocos性能优化博客:https://new.qq.com/omn/20210413/20210413A04JEH00.html 微信小游戏性能优化指南:https://developers.weixin.qq.com/minigame/dev/guide/performance/perf-overview.html
比较通用的项目级的优化策略,整合cocos博客、微信小游戏及laya性能优化官方文档总结并实践
1、场景优化策略
自动释放资源 优化前
优化后
2、图集批次合并
1)静态图集
使用cocos自带工具的自动图集配置 https://docs.cocos.com/creator/2.0/manual/zh/asset-workflow/auto-atlas.html
点击preview可查看生成打包图集,注意command+s保存
2)动态图集(包括文字)
优化前
优化后
对其他场景采用类似方法 最好还是使用位图字体(bmpfont (.png + .fnt 文件)),几个字母 + 图片,体积远远小于一个完整的字库(系统字体也是这样)
3、prefab优化
在 Prefab 的属性检查器中,我们可以看到优化策略这个选项。这个也需要我们根据实际的使用情况进行选择。 当我们选择“优化多次创建性能”这个选项时,Prefab 加载后会进行一个预处理的操作,这个预处理其实就是动态生成一些 Prefab 的实例化代码,并把这些代码交给 jit 去进行优化。这样在实例化时的耗时将会大大减少,相应的,在 load 时的耗时会有所增加。 当我们选择“优化单次创建性能”这个选项时,Prefab 加载后会跳过预处理的步骤,这样在加载时的耗时会减少很多,但实例化时的耗时会增加。例如一些固定 UI 界面,用于方便加载场景或者进行功能划分,通常会做成 Prefab,这种 Prefab 只会加载一次的,就可以选择这个选项,提升加载的性能。
需要注意的有一点:由于微信小游戏平台禁用了动态加载代码,类似 eval 这些不能使用,因此优化策略这个选项在微信小游戏平台是无效的。
4、代码体积
引擎:把不要的模块去掉就可以,你要知道哪些模块是占体积多的。物理引擎,能不用的模块,就不用。【项目设置】-【模块设置】,只打包必要模块即可。后查看cocos2d-js-min.js体积
5、资源纹理压缩
在cocos creater里面进行简单的配置,就可以在打包小游戏的过程中把图片进行纹理压缩。 批量压缩参考cocos社区提供的脚本:https://www.chuyouxiang.com/archives/760 实测有bug,建议用pngyu压缩即可
6、减少try catch的使用
项目中尽量减少 try catch
的使用,被 try catch
的函数执行会变得非常慢。
7、垃圾回收
小游戏中,JavaScript 中的每一个 Canvas 或 Image 对象都会有一个客户端层的实际纹理储存,实际纹理储存中存放着 Canvas、Image 的真实纹理,通常会占用相当一部分内存。 每个客户端实际纹理储存的回收时机依赖于 JavaScript 中的 Canvas、Image 对象回收。在 JavaScript 的 Canvas、Image 对象被回收之前,客户端对应的实际纹理储存不会被回收。通过调用 wx.triggerGC() 方法,可以加快触发 JavaScriptCore Garbage Collection(垃圾回收),从而触发 JavaScript 中没有引用的 Canvas、Image 回收,释放对应的实际纹理储存。 但 GC 具体触发时机还要取决于 JavaScriptCore 自身机制,并不能保证调用 wx.triggerGC() 能马上触发回收 使用场景:
- 建议在每局游戏开始或结束触发一下。
- 配合
wx.onMemoryWarning
监听内存告警事件使用 - 在场景切换的时候主动调用
wx.triggerGC
8、减少 Mask 组件数量
由于 Mask 组件需要在 stencil 和 content 前后都添加修改 gl 状态的 render command,因此使用 Mask 会打断我们的 DrawCall 批处理。 对于一些特殊的显示,例如圆角的 icon 等,如果条件允许,尽量不要使用 Mask 组件来进行处理,而是通过对资源进行处理达到同样的效果。目前 Mask 组件、Spine 组件、DragonBone 组件都会打断批处理,在节点结构上我们要避免被打断的情况发生。
9、借助cocos插件
YH Multi UI:https://forum.cocos.org/t/topic/134846 可以不用关心怎么去实现,怎么去优化,你直接用,自然DC就降下来了! 而且支持 一键转换
三、性能优化过程(代码逻辑)
业务中的游戏叫球生之路,是一款挡板接球撞击消除砖块的游戏,还有buff可以分裂多球
以下针对游戏代码逻辑做优化
1、游戏中多球碰撞检测
1)球到一定数量就不要再增加 目前是300做阈值,对象池初始节点数为50=》改成阈值200,初始200 2)看看碰撞体之间,有没有多余的判断,比如球跟球之间是否可以取消
2、首页关卡数据展示
1)远程获取 2)分页展示
四、测试性能工具
1. cocos 浏览器运行查看调试信息
其中drawcall可作为初步优化效果的重要依据
2. 微信小游戏真机调试工具
参考 https://developers.weixin.qq.com/minigame/dev/guide/performance/perf-action-memory-dev-profile.html
1) 微信开发者工具Performence与Memory
微信开发者工具中内置了Google Chrome DevTools 工具, DevTools可以帮助开发人员即时编辑页面并快速诊断问题,最终可以帮助开发人员更快地构建更好的小游戏。
2) Android真机性能工具
微信Android端自身集成了三种内存分析工具,分别是性能监控面板、Heap Snapshot、V8-CPU-Profile。开发者可通过三者监控Android真机环境下各性能指标。
3) PerfDog
移动全平台iOS/Android性能测试、分析工具平台。快速定位分析性能问题,提升APP应用及游戏的性能和品质。手机无需ROOT/越狱。手机硬件、游戏及APP应用也无需做任何修改,极简化即插即用。
3. 微信小游戏云测试(推荐)
云测试服务是微信小游戏团队为开发者提供的一套多模式在线测试服务,可以为用户提供智能、高效、稳定的云真机测试能力,帮助游戏快速进行功能、性能、兼容性、稳定性测试,并提供全面、专业、详实的产品质量评估和问题分析报告。
小游戏云测试服务具备下述能力和优势:
- 支持标准化、录制回放、测试框架等多种测试模式,开发者可以根据使用成本和测试精准度的不同需要灵活选择配套服务;
- 集成功能、性能、兼容性、稳定性等全套测试能力和工具,一次运行即可获得全方位测试结果;
- 提供覆盖主流厂商和头部用户的真机设备集群;
- 提供全面专业的可视化质量报告,帮助开发者快速定位问题。 https://developers.weixin.qq.com/minigame/dev/minigame-testtool/quick-start.html#%E8%BF%9B%E5%85%A5%E4%BA%91%E6%B5%8B%E8%AF%95
五、微信小游戏跑分优化
1、启动
1)数据预拉取
https://mp.weixin.qq.com/wxamp/devprofile/get_profile?token=1106658438&lang=zh_CN 开启功能后,在用户打开小程序时,小程序可提前拉取所需要的数据,从而提升小程序的加载速度。了解详情
小游戏暂时不支持
2)小游戏测速
3)引擎分离
注意构建时需要删掉构建模版里的引擎源码压缩文件,才不会报md5不同
小游戏内置的cocos引擎插件源码有bug,进入自动释放资源的场景回循环报错,已反馈待修复:https://developers.weixin.qq.com/community/develop/doc/0004800f2043288b96ddd20ec5b800?fromCreate=0
4)代码依赖
无用代码删除
2、网络性能
1)数据周期性更新
开启功能后,小程序可在后台每隔12小时下载数据到本地,使小程序在弱网或无网条件下也可以正常使用。了解详情
相关文章
- 简直人生外挂,直接涨薪25K,跪谢这份Java性能调优实战宝典
- 阿里P9师傅亲传98K+星的MySQL性能优化金字塔法则手册助我升职P7
- 开源实时监控系统CAT 3.0发布:多语言客户端及多项性能提升
- 性能测试|JMeter连接数据库
- 【ES三周年】Elasticsearch性能优化之道:GPT引领你探索索引与查询的奥秘
- 让Oracle SQL脱颖而出——性能优化实现(oracle的sql优化)
- Oracle数据库:利用缓存提升性能(oracle缓存数据库)
- MySQL性能调优维护手册(mysql维护手册)
- 优化MySQL并发配置,提升数据库性能(mysql并发配置)
- 深入了解Linux:查看性能的命令探究(linux查看性能命令)
- SQL Server拆分表:有效提升性能的秘诀(sqlserver拆分表)
- MySQL中刷新优化数据库性能走起(mysql中flush)
- 限制Oracle中的性能优化(limit在oracle)
- Oracle优化器快速安装实现良好性能(oracle优化器下载)
- 基于Oracle DOP优化数据库性能(oracle dop)
- 释放 Oracle 39086 版本,改善数据库性能(oracle 39086)