# 优化建议

# 启动性能

指标名称 指标释义 优化建议
代码包下载耗时 从启动开始到代码包下载完成阶段的耗时,即主包下载耗时 精简首包资源:① 使用资源压缩、文件合并(小文件合并,图集等)的方式降低资源占用量 ② 减少不必要的资源,通常只保留首屏依赖的少量资源

分包加载 :减少启动时需要下载的内容(普通资源或代码)

引擎插件能力:当小游戏首次启动时,如果本地已经存在同类别游戏引擎插件,可直接复用或可通过增量下载的方式快速下载(平台侧将引擎代码在客户端缓存,让不同的小游戏能够共用)

微信开发者工具开启"将 JS 代码编译成 ES5":上传代码时工具会压缩和混淆 JS 代码,减小代码包体积,某些场景不适用,具体参考代码编译
游戏代码注入耗时 game.js注入耗时 减少初始代码大小
首屏渲染耗时 从游戏代码注入完成到首帧开始渲染的耗时,首屏渲染准备阶段主要包含文件下载、文件处理两个部分 降低首屏渲染所需要资源:降低首屏的初始业务代码逻辑与资源(初始画面的资源不建议从远程CDN获取),尽量将资源置于首包内

尽快渲染:缩短业务代码注入完成到首屏渲染指令的时间 ①减少初始代码大小,降低代码注入时间 ②简化首屏逻辑,如不依赖第三方引擎进行轻量渲染

封面图插件:游戏首包仅绘制一张最简单的静态图,玩家能够在最短的时间内看到游戏元素进而提升游戏的启动留存
游戏可交互耗时 从首帧开始渲染到开发者调用wx.reportScene({sceneId: 7})的总耗时,可参考启动场景上报分析 并行下载能力:对于使用了代码分包能力的小游戏,可以考虑在启动流程中使用网络I/O去提前下载游戏所需要的代码分包资源,仅限 正式版 小游戏
总启动耗时 从启动游戏到首帧开始渲染的总耗时 参考上述优化建议

# 运行性能

指标名称 指标释义 优化建议
内存 小游戏进程所占总内存 纹理压缩:专为在计算机图形渲染系统中存储纹理而使用的图像压缩技术

减少垃圾回收:减少对象的临时创建,垃圾回收本身也会对CPU造成压力

使用work:一些异步处理的任务,可以放置于work中运行,待运行结束后,再把结果返回到小程序主线程

内存图表定位:通过截图查看整个内存占用峰值所在场景,通过优化处理逻辑减少内存占用

内存快照:能够查看到js内存
CPU 小游戏运行程序占用的CPU资源 ● GPU分担:在CPU出现瓶颈而GPU较为空闲时,可以采用GPU进行分担,比如GPU骨骼动画、GPU粒子等

图集合并:合成图集时可以一定程度上减少整体游戏包体,并且有利于引擎进行批次优化,降低CPU处理时间

定位内存泄漏:如果存在持续过度的增长,游戏有可能存在内存泄露的情况,可以通过运行的截图定位具体哪个场景疑似存在着内存泄露

CpuProfile分析:提交云测试时勾选日志选项"导出CPU Profile",在"设备详细报告"->"运行性能"->"CPU图表"->"展开详细数据",找到具体耗时过长的函数,并进行优化

CPU图表定位:通过截图查看整个CPU占用峰值所在场景,通过优化处理逻辑减少CPU占用
FPS 每秒渲染帧数 限制帧率:FPS游戏可用wx.setPreferredFramesPerSecond限制帧率避免设备发烫问题

FPS图表定位:通过在关键帧信息中对应的时间点的截图,找到对应的游戏场景,以及此时的DrawCall次数、顶点数和三角形面数,通过优化该场景的代码减少该场景掉帧情况的发生
Stutter 卡顿率,测试过程中卡顿时长的占比
DrawCall 调用图形绘制接口的次数 渲染合批:将一些使用相同材质的物体模型合并成一个模型,或游戏引擎工具在处理渲染队列时进行渲染批次优化,降低DrawCall的数量
其他 降低模型复杂度:评测不同机型能处理的模型定点数、面数的上限,使用LOD技术或在低端设备降低模型精度来提升游戏流畅程度

混合渲染:开放数据域请使用混合渲染模式加快渲染效率

垃圾回收:通过调用wx.triggerGC()方法,可以加快触发回收JavaScript中没有引用的Canvas、Image,释放对应的实际纹理储存

高性能模式:在高性能模式下, 性能提升显著

# 网络性能

指标名称 异常原因 优化建议
wx.downloadFile失败率 失败定位:可在"设备详细报告"->"网络性能"中查看具体的失败请求详情

日志定位:可在"设备详细报告"中下载"Console日志"查看具体原因
● 在MP后台"开发"->"开发管理"->"开发设置"->"服务器域名"加上对应的 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合法域名"中加上资源域名,微信开发者工具"详情"->"本地设置"中设置取消勾选"不校验合法域名",然后重新上传体验版

● 如果只有个别设备出现此问题,可能是设备问题,需云测试服务人员关注
设备异常 ● 设备原因 ● 无需开发者修改,云测试服务人员关注