# PC小游戏性能优化

## 概述
PC 小游戏运行在台式机和笔记本上，通常来讲 PC 设备的 CPU 和 显卡性能都会优于移动端，但这并不意味着 PC 端小游戏不需要进行性能优化，本文档期望开发者对PC小游戏性能有个大概的认知并了解 PC 小游戏性能优化需要关注的方向。

## 性能概况
一般评估游戏性能，我们会关注游戏的大盘帧率、卡顿率等数据，在《小游戏数据助手》小程序我们也开放了很多游戏运行时相关的数据，目前 PC 端的性能数据能力我们还在加速开发中，预计 25年年初会开放给开发者。

从大盘已有的数据来看，如下表所示，可以分享给开发者一些信息：PC 上通常 CPU 会优于移动端，因此卡顿率较移动端有大幅度降低，同时 PC 上与安卓类似，对游戏的运行时没有明确的阈值限制，大盘的内存 crash 率在 0.2% 左右。
|  平台   | jank  |  bigjank |
|  ----  | ----  | ---- |
| iOS  | 2.44 | 1.16|
| Android  | 2.59 | 1.43|
| PC  |**1.04** | **0.55** |

## 优化指引
下面是一些平台推荐的需要在 PC 小游戏上关注的优化点。

### 充分使用真机调试
虽然微信开发者工具和 PC 小游戏是类似的架构，但性能测试尽可能以真机数据为准，PC 小游戏同样支持真机调试，具体的操作为：在开发工具里，设置 - 通用设置 选择 启动 PC 端自动预览，然后在工具栏预览图标里选择 自动预览 Tab，点击 编译并预览 即可。

在真机调试模式下，可以充分利用好 Performance 面板，分析对游戏性能带来影响的热点函数。

![真机调试](https://res8.wxqcloud.qq.com.cn/wxdoc/09199c3f-25e5-44d8-89c8-4998f6325b75.png)

### 使用压缩纹理
在移动端，随着引擎工具链的完善，大部分小游戏都会使用压缩纹理技术来提升游戏性能。一般而言压缩纹理的使用一方面能够降低内存占用，另一方面因为避免了 CPU 侧对纹理进行软解，游戏的卡顿率也会降低。在移动端，因为 ASTC 压缩纹理格式在移动端有非常好的兼容性，所以大部分小游戏都会默认使用 ASTC 作为压缩纹理格式。在而在PC、Mac等场景，因为**硬件层面不支持 ASTC 压缩纹理格式**，引擎通常会对纹理进行软解来保障渲染的正常。

过去很多开发者的认知可能是 PC 端性能过剩，进行软解对性能影响不大，实际上对 ASTC 软解对性能的影响远比想象中要大，下图为某中重度小游戏在 PC 小游戏的 profiler 截图，可以看到单帧内 ASTC 软解耗时较大会有游戏运行带来明显的 jank 和 bigjank。
![alt text](https://res8.wxqcloud.qq.com.cn/wxdoc/90736c8d-4ffb-42c0-9017-714c03723983.png)

因此我们强烈建议开发者针对 PC 小游戏做好相应的纹理处理策略，以 Unity 引擎为例，可以针对 PC 单独打 DXT 包，或者用团结引擎的[TextureManager](https://docs.unity.cn/cn/tuanjiemanual/Manual/TextureManager.html)方案，利用好上面的真机调试工具可以直观对比出两者的效果。

### 避免高频文件读写
在 PC 小游戏上，高频的文件读写对性能也会有显著的影响，如下图所示，短时间内高频同步读写文件会导致单帧耗时非常夸张。
![alt text](https://res8.wxqcloud.qq.com.cn/wxdoc/6cb19ef5-f727-4b1f-98cd-d8c2880ff4c2.png)
这有两方面的原因，一方面在 PC 上文件系统的性能与移动端还有些差距，平台还在持续优化中，另一方面，之前在移动端的一些优化手段，比如 Unity 游戏我们会推荐 [WXAssetBundle](https://wechat-miniprogram.github.io/minigame-unity-webgl-transform/Design/UsingAssetBundle.html#%E4%B8%89%E3%80%81%E6%9B%B4%E8%8A%82%E7%9C%81%E5%86%85%E5%AD%98%E7%9A%84wxassetbundle) 来做内存优化，这个方案会频繁读写磁盘，加剧了问题。实际上在 PC 上与安卓端类似，没有明确的内存阈值，在 PC 小游戏端，可以不走 WXAssetBundle 的方案。

总得来说，我们同样建议充分利用好真机调试工具，去评估在移动端的优化是否反而对 PC 小游戏带来了负面影响。

### 避免不需要的限帧
从大盘数据来看，我们发现 PC 端小游戏的帧率并没有明显高于移动端，经过分析，有些开发者在移动端会通过 setPreferredFramesPerSecond 接口限帧来避免游戏的发热和卡顿问题。前面也提到，PC 端的卡顿率会明显低于移动端，且 PC 上一般可以忽略功耗带来的发热问题，所以我们建议在保证性能的前提下，可以避免不必要的限帧来进一步提升玩家在 PC 端的体验。

### 开启更高清的画质
移动端通常会考虑资源的加载速度和内存占用而默认使用低清资源，PC 小游戏对单个小游戏内存使用没有明确阈值限制且网络条件更加稳定，我们推荐开发者在 PC 端可以默认开启高清画质并参考[文档](pc-adapter)做好大屏适配，给用户更好的游戏体验。
