Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
qq_39854397
minigame-unity-webgl-transform
提交
8cc88a57
M
minigame-unity-webgl-transform
项目概览
qq_39854397
/
minigame-unity-webgl-transform
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
minigame-unity-webgl-transform
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
8cc88a57
编写于
12月 06, 2022
作者:
S
skyler
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add toc
上级
6b48f0c3
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
84 addition
and
46 deletion
+84
-46
Design/iOSOptimization.md
Design/iOSOptimization.md
+84
-46
未找到文件。
Design/iOSOptimization.md
浏览文件 @
8cc88a57
# iOS高性能模式
# iOS 高性能模式
-
[
什么是高性能模式
](
#什么是高性能模式
)
-
[
性能提升
](
#性能提升
)
-
[
CPU 消耗
](
#cpu-消耗
)
-
[
压力测试
](
#压力测试
)
-
[
如何开通
](
#如何开通
)
-
[
高性能模式限制
](
#高性能模式限制
)
-
[
内存限制
](
#内存限制
)
-
[
代码体积限制
](
#代码体积限制
)
-
[
QA
](
#qa
)
-
[
1. 如何判别游戏否已经开启了高性能模式?
](
#1-如何判别游戏否已经开启了高性能模式
)
-
[
2. 使用高性能模式下,游戏本身是否需要做修改?
](
#2-使用高性能模式下游戏本身是否需要做修改
)
-
[
3. iOS 报错提示未开启 gzip/br 压缩
](
#3-gzip-off-warning
)
-
[
4. 资源下载提示 isTrusted
](
#4-isTrusted-warning
)
-
[
5. 卡在启动封面无法启动
](
#5-卡在启动封面无法启动
)
-
[
6. 个别游戏 UI 会出现闪烁问题
](
#6-ui-flicker
)
-
[
7. 为什么开启了高性能模式,游戏启动很烫?
](
#7-为什么开启了高性能模式游戏启动很烫
)
-
[
8. 使用高性能模式下,不优化内存、WASM 代码包体积就发布上线可以吗?
](
#8-release-with-no-memory-and-code-size-optimize
)
-
[
9. iOS 高性能模式与安卓性能对比如何?
](
#9-iOS-high-performance-vs-android
)
## 什么是高性能模式
## 什么是高性能模式
在iOS环境下,标准的微信小游戏WASM运行模式是无JIT, 对于计算性能要求较高的游戏会受到比较大的限制。常见情况是:
在 iOS 环境下,标准的微信小游戏 WASM 运行模式是无 JIT, 对于计算性能要求较高的游戏会受到比较大的限制。常见情况是:
1.
中低端机帧率较低,流畅度难以达到上线标准
1.
中低端机帧率较低,流畅度难以达到上线标准
2.
对
CPU
计算资源消耗过高,运行一段时间后设备温度持续上升
2.
对
CPU
计算资源消耗过高,运行一段时间后设备温度持续上升
小游戏环境框架提供了高性能运行模式,该运行模式下
CPU
算力得到明显提升。但该模式也存在更严格的内存与代码包体限制,需要开发者采取合适的手段以达到最优。
小游戏环境框架提供了高性能运行模式,该运行模式下
CPU
算力得到明显提升。但该模式也存在更严格的内存与代码包体限制,需要开发者采取合适的手段以达到最优。
## 性能提升
## 性能提升
### CPU消耗
通过多款游戏项目,我们得到实际游戏项目的CPU占用如下图所示:
### CPU 消耗
通过多款游戏项目,我们得到实际游戏项目的 CPU 占用如下图所示:
<img
src=
'../image/iosoptimization3.png'
width=
"500"
/>
<img
src=
'../image/iosoptimization3.png'
width=
"500"
/>
我们得到以下结论:
我们得到以下结论:
-
高性能模式在长期执行过程中CPU明显低于普通模式,后者长期处于高CPU占用因此长期运行容易越来越烫
-
游戏启动初始阶段,高性能模式存在CPU高峰用于WebAssembly编译优化
-
高性能模式在长期执行过程中 CPU 明显低于普通模式,后者长期处于高 CPU 占用因此长期运行容易越来越烫
-
采用
[
代码分包
](
WasmSplit.md
)
后,高性能模式能较快回落CPU占用并维持正常水平
-
游戏启动初始阶段,高性能模式存在 CPU 高峰用于 WebAssembly 编译优化
-
采用
[
代码分包
](
WasmSplit.md
)
后,高性能模式能较快回落 CPU 占用并维持正常水平
### 压力测试
### 压力测试
使用Unity所提供的Benchmark Demo的部分案例进行评测:
使用 Unity 所提供的 Benchmark Demo 的部分案例进行评测:
-
Instntiate & Destroy
-
Instntiate & Destroy
-
Animation & Skinning
-
Animation & Skinning
-
Physics Cubes
-
Physics Cubes
-
AI Agents
-
AI Agents
测试过程为不断增加运算复杂度,直到帧率下降到特定数值。
测试过程为不断增加运算复杂度,直到帧率下降到特定数值。
...
@@ -32,73 +58,85 @@
...
@@ -32,73 +58,85 @@
<img
src=
'../image/iosoptimization1.png'
width=
"250"
/>
<img
src=
'../image/iosoptimization1.png'
width=
"250"
/>
<img
src=
'../image/iosoptimization2.png'
width=
"250"
/>
<img
src=
'../image/iosoptimization2.png'
width=
"250"
/>
上图分别是
iOS
端普通模式与高性能模式的得分,可以看到在几个压测示例中高性能模式均明显优于普通模式。
上图分别是
iOS
端普通模式与高性能模式的得分,可以看到在几个压测示例中高性能模式均明显优于普通模式。
经实际游戏测试,游戏帧率都会得到明显改善,虽无法达到
Benchmark
几乎一个数量级的差异。
经实际游戏测试,游戏帧率都会得到明显改善,虽无法达到
Benchmark
几乎一个数量级的差异。
## 如何开通
## 如何开通
iOS端小游戏高性能模式适用于遇到iOS环境运行性能不足,运行发烫的小游戏。
iOS 端小游戏高性能模式适用于遇到 iOS 环境运行性能不足,运行发烫的小游戏。
-
需要该能力的开发者登录
[
微信公众平台
](
https://mp.weixin.qq.com
)
-> 首页能力地图模块 -> 点击进入"生产提效包" -> 点击开通高性能模式。
<img
src=
"../image/mp_addplugin.png"
>
-
需要该能力的开发者登录
[
微信公众平台
](
https://mp.weixin.qq.com
)
-> 首页能力地图模块 -> 点击进入"生产提效包" -> 点击开通高性能模式。
<img
src=
"../image/mp_addplugin.png"
>
-
开通成功后,过配置 game.json 的 iOSHighPerformance 为 true 则可进入高性能模式,通过去掉此开关可以正常回退到普通模式,以便两种模式对比。
-
开通成功后,过配置 game.json 的 iOSHighPerformance 为 true 则可进入高性能模式,通过去掉此开关可以正常回退到普通模式,以便两种模式对比。
## 高性能模式限制
## 高性能模式限制
### 内存限制
### 内存限制
高性能模式下,iOS低端机(6s/7/8等)2G RAM机型的内存限制为1G,中高端机(7P/8P/iPhoneX/XSAMX/11/12等)3G以上内存机型的内存限制为1.4G,因此开发者务必保证内存峰值不超过该数值。
建议开发者根据指引
[
优化Unity WebGL的内存
](
OptimizationMemory.md
)
。
高性能模式下,iOS 低端机(6s/7/8 等)2G RAM 机型的内存限制为 1G,中高端机(7P/8P/iPhoneX/XSAMX/11/12 等)3G 以上内存机型的内存限制为 1.4G,因此开发者务必保证内存峰值不超过该数值。
建议开发者根据指引
[
优化 Unity WebGL 的内存
](
OptimizationMemory.md
)
。
### 代码体积限制
### 代码体积限制
高性能模式下,WASM代码将被编译并优化,需要占用更多的编译消耗与内存。如果未进行优化前,可以明显感受到启动开始阶段(如启动前1分钟内)设备发烫。
***上线发布时,特别建议使用[WASM代码分包](WasmSplit.md)+[压缩纹理](CompressedTexture.md)+[小游戏音频替换](AudioOptimization.md)+[UnityHeap](OptimizationMemory.md)预留这几种优化手段。**
*
高性能模式下,WASM 代码将被编译并优化,需要占用更多的编译消耗与内存。如果未进行优化前,可以明显感受到启动开始阶段(如启动前 1 分钟内)设备发烫。
**_上线发布时,特别建议使用[WASM 代码分包](WasmSplit.md)+[压缩纹理](CompressedTexture.md)+[小游戏音频替换](AudioOptimization.md)+[UnityHeap](OptimizationMemory.md)预留这几种优化手段。_**
## QA
## QA
1.
如何判别游戏否已经开启了高性能模式?
-
删除本地小游戏(包括开发版、体验版和正式版),
-
重新进入小游戏并打开调试,查看vconsole日志, 关注"game start"日志中的"render"字段为"h5"则为高性能模式
-
系统和基础库要求是: iOS>=14.0, 基础库>=2.23.1, 用户占比约为75%。 对于不满足此要求时回退为普通执行方式。
2.
使用高性能模式下,游戏本身是否需要做修改?
### 1. 如何判别游戏否已经开启了高性能模式?
-
业务代码无需做任何调整,普通模式与高性能模式可以无缝切换。
-
高性能模式下,请不要服务端设置Cookie,游戏端内因为跨域问题会读取不到Cookie
-
删除本地小游戏(包括开发版、体验版和正式版),
-
Android下载资源无问题,高性能模式提示资源下载失败等网络问题,请参考文档
[
网络通信适配
](
UsingNetworking.md#注意事项
)
关于跨域的问题
-
重新进入小游戏并打开调试,查看 vconsole 日志, 关注"game start"日志中的"render"字段为"h5"则为高性能模式
-
系统和基础库要求是: iOS>=14.0, 基础库>=2.23.1, 用户占比约为 75%。 对于不满足此要求时回退为普通执行方式。
### 2. 使用高性能模式下,游戏本身是否需要做修改?
3.
iOS报错提示未开启gzip/br压缩
-
业务代码无需做任何调整,普通模式与高性能模式可以无缝切换。
-
高性能模式下,请不要服务端设置 Cookie,游戏端内因为跨域问题会读取不到 Cookie
-
Android 下载资源无问题,高性能模式提示资源下载失败等网络问题,请参考文档
[
网络通信适配
](
UsingNetworking.md#注意事项
)
关于跨域的问题
### <p id="3-gzip-off-warning">3. iOS 报错提示未开启 gzip/br 压缩
<img
src=
'../image/contentencoding_error.png'
width=
"500"
>
<img
src=
'../image/contentencoding_error.png'
width=
"500"
>
可通过微信开发者工具查看
Content-Encoding是否为gzip或
br
可通过微信开发者工具查看
Content-Encoding 是否为 gzip 或
br
如果有正确压缩,可忽略这个错误。
如果有正确压缩,可忽略这个错误。
问题原因:由于跨域获取不到
Content-Encoding
头
问题原因:由于跨域获取不到
Content-Encoding
头
解决办法:增加跨域头部
`"Access-Control-Expose-Headers": "Content-Length, Content-Encoding",`
解决办法:增加跨域头部
`"Access-Control-Expose-Headers": "Content-Length, Content-Encoding",`
<img
src=
"../image/devtools_network.png"
width=
"500"
>
<img
src=
"../image/devtools_network.png"
width=
"500"
>
4.
资源下载提示
`isTrusted`
### <p id="4-isTrusted-warning">
4. 资源下载提示`isTrusted`
<img
src=
'../image/cors_istrusted.png'
width=
'500'
>
<img
src=
'../image/cors_istrusted.png'
width=
'500'
>
多半由于跨域问题导致,可通过开发者工具查看对应资源的Response Header是否有跨域头,
多半由于跨域问题导致,可通过开发者工具查看对应资源的 Response Header 是否有跨域头,
请参考文档
[
网络通信适配
](
UsingNetworking.md#注意事项
)
关于跨域的问题
请参考文档
[
网络通信适配
](
UsingNetworking.md#注意事项
)
关于跨域的问题
### 5. 卡在启动封面无法启动
-
右上角打开调试,重启小游戏,点三次下方的 Unity logo 打开 vconsole
-
如果出现资源访问失败,但 Android 和开发者工具却可以下载则参考 QA3 关于跨域问题
-
15.4 以上系统出现"Not implemented"与内存问题,此为 Unity & iOS 15.4 的 BUG,微信提供的 wasm 代码分包(推荐)或 Unity WebGL 官方论坛的
[
临时修复方案
](
https://forum.unity.com/threads/ios-15-webgl-2-issue.1176116/page-2
)
### <p id="6-ui-flicker">6. 个别游戏 UI 会出现闪烁问题
-
已知 iOS 15.4 偶现,如果开发者遇到请提供可复现 Unity 工程联系 minigamedevop08
### 7. 为什么开启了高性能模式,游戏启动很烫?
5.
卡在启动封面无法启动
-
请参考本文前面部分,如果未使用代码分包的情况下 JIT 编译优化将耗费大量性能
-
右上角打开调试,重启小游戏,点三次下方的Unity logo打开vconsole
-
如果出现资源访问失败,但Android和开发者工具却可以下载则参考QA3关于跨域问题
-
15.4以上系统出现"Not implemented"与内存问题,此为Unity & iOS 15.4的BUG,微信提供的wasm代码分包(推荐)或Unity WebGL官方论坛的
[
临时修复方案
](
https://forum.unity.com/threads/ios-15-webgl-2-issue.1176116/page-2
)
6.
个别游戏UI会出现闪烁问题
### <p id="8-release-with-no-memory-and-code-size-optimize">8. 使用高性能模式下,不优化内存、WASM 代码包体积就发布上线可以吗?
-
已知iOS 15.4偶现,如果开发者遇到请提供可复现Unity工程联系minigamedevop08
7.
为什么开启了高性能模式,游戏启动很烫?
-
不建议。iOS 高性能模式虽然能提运行算力,但对内存、WASM 包体积有更苛刻的要求,需要更多的精力做优化。如果不做任何优化的情况下,很有可能会遇到超出内存限制而崩溃,启动时发烫现象严重等问题。
**_上线发布时,特别建议使用[WASM 代码分包](WasmSplit.md)+[压缩纹理](CompressedTexture.md)+[小游戏音频替换](AudioOptimization.md)+[UnityHeap](OptimizationMemory.md)预留这几种优化手段。_**
-
请参考本文前面部分,如果未使用代码分包的情况下JIT编译优化将耗费大量性能
6.
使用高性能模式下,不优化内存、WASM代码包体积就发布上线可以吗?
### <p id="9-iOS-high-performance-vs-android">9. iOS 高性能模式与安卓性能对比如何?
-
不建议。iOS高性能模式虽然能提运行算力,但对内存、WASM包体积有更苛刻的要求,需要更多的精力做优化。如果不做任何优化的情况下,很有可能会遇到超出内存限制而崩溃,启动时发烫现象严重等问题。
***上线发布时,特别建议使用[WASM代码分包](WasmSplit.md)+[压缩纹理](CompressedTexture.md)+[小游戏音频替换](AudioOptimization.md)+[UnityHeap](OptimizationMemory.md)预留这几种优化手段。**
*
7.
iOS高性能模式与安卓性能对比如何?
-
两种系统环境下,WASM 执行都是 JIT 代码。但由于底层虚拟机差异过大以及自身不断迭代,难以横向对比。
-
两种系统环境下,WASM执行都是JIT代码。但由于底层虚拟机差异过大以及自身不断迭代,难以横向对比。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录