# 优化建议
# 启动性能
指标名称 | 指标释义 | 优化建议 |
---|---|---|
代码包下载耗时 | 从启动开始到代码包下载完成阶段的耗时,即主包下载耗时 | ● 精简首包资源:① 使用资源压缩、文件合并(小文件合并,图集等)的方式降低资源占用量 ② 减少不必要的资源,通常只保留首屏依赖的少量资源 ● 分包加载 :减少启动时需要下载的内容(普通资源或代码) ● 引擎插件能力:当小游戏首次启动时,如果本地已经存在同类别游戏引擎插件,可直接复用或可通过增量下载的方式快速下载(平台侧将引擎代码在客户端缓存,让不同的小游戏能够共用) ● 微信开发者工具开启"将 JS 代码编译成 ES5":上传代码时工具会压缩和混淆 JS 代码,减小代码包体积,某些场景不适用,具体参考代码编译 |
游戏代码注入耗时 | game.js注入的耗时 | ● 减少初始代码大小 |
首屏渲染耗时 | 从游戏代码注入完成到首帧开始渲染的耗时,首屏渲染准备阶段主要包含文件下载、文件处理两个部分 | ● 降低首屏渲染所需要资源:降低首屏的初始业务代码逻辑与资源(初始画面的资源不建议从远程CDN获取),尽量将资源置于首包内 ● 尽快渲染:缩短业务代码注入完成到首屏渲染指令的时间 ①减少初始代码大小,降低代码注入时间 ②简化首屏逻辑,如不依赖第三方引擎进行轻量渲染 ● 封面图插件:游戏首包仅绘制一张最简单的静态图,玩家能够在最短的时间内看到游戏元素进而提升游戏的启动留存 |
游戏可交互耗时 | 从首帧开始渲染到开发者调用wx.reportScene({sceneId: 7})的总耗时,可参考启动场景上报分析 | ● 并行下载能力:对于使用了代码分包能力的小游戏,可以考虑在启动流程中使用网络I/O去提前下载游戏所需要的代码分包资源,仅限 正式版 小游戏 |
总启动耗时 | 从启动游戏到首帧开始渲染的总耗时 | ● 参考上述优化建议 |
# 运行性能
指标名称 | 指标释义 | 优化建议 |
---|---|---|
CPU | 小游戏运行程序占用的CPU资源 | ● GPU分担:在CPU出现瓶颈而GPU较为空闲时,可以采用GPU进行分担,比如GPU骨骼动画、GPU粒子等 ● 图集合并:合成图集时可以一定程度上减少整体游戏包体,并且有利于引擎进行批次优化,降低CPU处理时间 ● 定位内存泄漏:如果存在持续过度的增长,游戏有可能存在内存泄漏的情况,可以通过运行的截图定位具体哪个场景疑似存在着内存泄漏 ● CpuProfile分析:提交云测试时勾选日志选项"导出CPU Profile",在"详细报告"->"运行性能"->"CPU图表"->"展开详细数据",找到具体耗时过长的函数,并进行优化 ● CPU图表定位:通过截图查看整个CPU占用峰值所在场景,通过优化处理逻辑减少CPU占用 |
内存 | 小游戏进程所占总内存 | ● 纹理压缩:专为在计算机图形渲染系统中存储纹理而使用的图像压缩技术 ● 减少垃圾回收:减少对象的临时创建,垃圾回收本身也会对CPU造成压力 ● 使用work:一些异步处理的任务,可以放置于work中运行,待运行结束后,再把结果返回到小程序主线程 ● 内存图表定位:通过截图查看整个内存占用峰值所在场景,通过优化处理逻辑减少内存占用 ● 内存快照:能够查看到js内存 |
FPS | 每秒渲染帧数 | ● 限制帧率:FPS游戏可用wx.setPreferredFramesPerSecond限制帧率避免设备发烫问题 ● FPS图表定位:根据关键帧对应时间点的截图,定位对应游戏场景以及DrawCall次数、顶点数和三角形面数,通过优化该场景的代码减少该场景掉帧情况的发生 |
Stutter | 卡顿率,测试过程中卡顿时长的占比 | |
DrawCall | 调用图形绘制接口的次数 | ● 渲染合批:将一些使用相同材质的物体模型合并成一个模型,或游戏引擎工具在处理渲染队列时进行渲染批次优化,降低DrawCall的数量 |
其他 | ● 降低模型复杂度:评测不同机型能处理的模型定点数、面数的上限,使用LOD技术或在低端设备降低模型精度来提升游戏流畅程度 ● 混合渲染:开放数据域请使用混合渲染模式加快渲染效率 ● 垃圾回收:通过调用wx.triggerGC()方法,可以加快触发回收JavaScript中没有引用的Canvas、Image,释放对应的实际纹理储存 ● 高性能模式:在高性能模式下, 性能提升显著 |
# 网络性能
指标名称 | 异常原因 | 优化建议 |
---|---|---|
wx.downloadFile失败率 | ● 失败定位:可在"详细报告"->"网络性能"中查看具体的失败请求详情 ● 日志定位:可在"详细报告"中下载"Console日志"查看具体原因 | ● 在微信公众平台中"开发"->"开发管理"->"开发设置"->"服务器域名"加上对应的 dowloadFile/requests/uploadFile/socket 合法域名 |
wx.request失败率 | ||
wx.uploadFile失败率 | ||
wx.sendSocketMessage失败率 |
# 兼容性
主要问题 | 异常原因 | 优化建议 |
---|---|---|
游戏出现黑屏 | ● 黑屏定位:可在"详细报告"->"兼容性"中查看具体的黑屏截图信息 ● 内存异常 ● CPU异常 | ● 可参考内存/CPU优化建议 |
游戏出现JSError | ● JSError定位:可在"详细报告"->"兼容性"中查看具体的JSError详情 | ● 如果开发者使用引擎工具生成SourceMap,并在开发者工具上传,则可直接定位到源文件报错位置 |
小游戏打开失败 | ● 未设置体验版 ● 跑云测试过程中切换或取消体验版版本 | ● 设置体验版 ● 在测试任务执行完之前,建议不要更新体验版版本 |
# 其他
主要问题 | 异常原因 | 优化建议 |
---|---|---|
用例执行失败 | ● 自定义脚本代码有误 ● 可在"详细报告"中下载"Console日志"查看具体原因 | ● 根据Console日志的报错信息,修改自定义脚本 |
用例执行超时 | ● 自定义脚本用例过长,用例还未执行结束,但云测试已达到最大执行时长 | ● 提交测试时,测试时长选择完整模式 ● 精简用例内容 |
小游戏卡Unity Loading页 | ● Loading页提示"资源下载失败" ● Loading页长时间未加载完 ● 可在"详细报告"中下载"Console日志"查看具体原因 ● 极少可能是设备问题(设备网络问题/设备性能问题) | ● MP后台"开发"->"开发管理"->"开发设置"->"服务器域名"->"downloadFile合法域名"中加上资源域名,微信开发者工具"详情"->"本地设置"中设置取消勾选"不校验合法域名",然后重新上传体验版 ● 如果只有个别设备出现此问题,可能是设备问题,需云测试服务人员关注 |
设备异常 | ● 设备原因 | ● 无需开发者修改,云测试服务人员关注 |
服务异常 | ● 体验版问题或服务问题 | ● 请确保跑测过程中未操作取消体验版或切换体验版 ● 如果是授权给第三方的小程序,需先解除授权后,才可正常使用体验版。扫码登录微信公众平台,记录顶部URL中的token,替换 解除授权链接 中的token,在第三方平台授权管理中解除授权。 ● 如果非以上两点问题,请联系客服反馈 |
# Unity优化建议
# 启动性能
首资源包下载耗时 | 游戏首个data资源文件下载的耗时 | ● 首资源包压缩:转换面板勾选“压缩首资源包” 或 CDN管理后端针对首资源包(后缀.txt)“开启gzip/br压缩” ● 自定义字体处理:中文显示需要自定义字体,打包在首资源包或Bundle,尽量使用2~3MB以内的精简字体 |
WASM代码下载/编译耗时 | 游戏代码压缩包下载/编译的耗时 | ● 勾选"Strip Engine Code"并设置"Managed Stripping Level"为High ● 代码分包:使用代码分包工具将代码包减少到原始尺寸的到1/3 |
CALLMAIN耗时 | 引擎和首场景(Loading)初始化的耗时 | ● 精简首场景物件:尽快渲染让玩家看到游戏首画面 ● 减少代码包体:剔除不必要的插件 |
游戏初始化完成耗时 | 引擎和首场景完成,出现首个业务场景的耗时 | ● 编译选项中仅勾选首场景 ● 减少初始化与首帧逻辑:首场景Awake/Start/首次Update不要包含过重逻辑 ● 资源按需加载:可使用Addressable或AssetBundle进行资源按需加载;单个包体最好不超过2MB;资源请求并发数不超过20个 ● 使用预下载功能:提前通过网络下载资源并缓存到本地,下次使用时从本地缓存中读取文件,以此提高资源加载速度 |
# 运行性能
指标名称 | 指标释义 | 优化建议 |
---|---|---|
CPU | 小游戏运行程序占用的CPU资源 | ● Unity Profiler性能调优 ● Android CPU Profiler性能调优 |
内存 | 小游戏进程所占总内存 | ● 降低WASM代码编译内存:WASM代码编译所占用内存占用非常大(如在iOS系统,30MB未压缩代码需300MB运行时编译内存)1、使用代码分包工具; 2、手动删除多余插件,减少不必要的Unity模块引入(如物理、Unity数据统计等) ● 降低GPU内存:1、压缩纹理优化能最大程度地减少内存与解压开销;2、升级引擎至2021使用ASTC压缩纹理;3、关闭HDR,标准渲染管线在"GraphicsSetting-tier2"(WebGL使用tier2)取消勾选"Use HDR";URP管线通过renderer配置取消;4、使用高性能模式或高性能+模式将显著降低GPU内存 ● 降低UnityHeap:1、转换面板设置合理的“UnityHeap预留内存”,切忌超出使用;2、避免场景/AssetBundle过大导致瞬间峰值;3、避免单帧内分配过多的对象, 切忌产生跳跃峰值 ● 降低首资源包与AssetBundle内存:1、减少首资源包大小,此部分始终占用内存无法释放, 使用AssetBundle;2、AssetBundle按需加载,及时释放以节省内存;3、AssetBundle使用时被解压占用Unity Native内存,应减少AssetBundle大小;4、避免使用Unity自带的文件缓存机制, 首资源包和AssetBundle都不应使用文件Cache ● 降低音频内存:1、不要使用fmod播放长音频,如游戏BGM;2、控制音效数量,同时存在的音频数不应该超过20个;3、尽量强制使用单声道音频,双声道会产生2倍内存消耗 ● Unity WebGL的内存优化 |