器材加载数据记录与分析
<table>
<thead>
<tr>
<th style="text-align: left;">最后修订日期</th>
<th style="text-align: left;">2024-5-30</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">作者</td>
<td style="text-align: left;">刘备</td>
</tr>
<tr>
<td style="text-align: left;">V1.0.0</td>
<td style="text-align: left;">创建文档</td>
</tr>
</tbody>
</table>
<h3>数据记录</h3>
<p>正常加载测试
<strong>TanHuangCeLiJiElement</strong>
Start.lua 246K
Node.json 396K</p>
<p>总耗时 1880
Lua解析初始化 1030
Node.json解析 540
CreateLabObjectEntry.Init() 器材对象创建 98</p>
<p>> 参考图片
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=8738bdd5e34b24724a754a4e08d3e51d&amp;file=file.png" alt="" /></p>
<p>lua代码初始化注释测试
<strong>TanHuangCeLiJiElement</strong>
总耗时 1124
Lua解析 126
Node.json解析 566
CreateLabObjectEntry.Init() 器材对象创建 93</p>
<p>> 参考图片
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=c5c80cf4f42b50bcd7944f684430e481&amp;file=file.png" alt="" /></p>
<p>正常加载测试
<strong>JiuJingDengElement</strong>
Start.lua 26K
Node.json 58K</p>
<p>总耗时 2327
Lua解析初始化 1577
Node.json解析 400
CreateLabObjectEntry.Init() 器材对象创建 91</p>
<p>> 参考图片
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=1928ad881ce4bd26c6a96f1073e4d1c3&amp;file=file.png" alt="" /></p>
<p>lua代码初始化注释测试
<strong>JiuJingDengElement</strong>
总耗时 739
Lua解析 8
Node.json解析 384
CreateLabObjectEntry.Init() 器材对象创建 93</p>
<p>> 参考图片
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=a0bd53e8882fac22e6bcfc83ca28f5f8&amp;file=file.png" alt="" /></p>
<h3>对比分析</h3>
<table>
<thead>
<tr>
<th style="text-align: left;">组件名称</th>
<th style="text-align: left;">测试类型</th>
<th style="text-align: left;">Start.lua大小</th>
<th style="text-align: left;">Node.json大小</th>
<th style="text-align: left;">总耗时</th>
<th style="text-align: left;">Lua初始化</th>
<th style="text-align: left;">Lua耗时占比</th>
<th style="text-align: left;">Node.json解析</th>
<th style="text-align: left;">Node.json耗时占比</th>
<th style="text-align: left;">反射相关</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">TanHuangCeLiJiElement</td>
<td style="text-align: left;">正常</td>
<td style="text-align: left;">246K</td>
<td style="text-align: left;">396K</td>
<td style="text-align: left;">1880</td>
<td style="text-align: left;">1030</td>
<td style="text-align: left;">55%</td>
<td style="text-align: left;">540</td>
<td style="text-align: left;">29%</td>
<td style="text-align: left;">98ms</td>
</tr>
<tr>
<td style="text-align: left;">TanHuangCeLiJiElement</td>
<td style="text-align: left;">lua初始化注释</td>
<td style="text-align: left;">246K</td>
<td style="text-align: left;">396K</td>
<td style="text-align: left;">1124</td>
<td style="text-align: left;">126</td>
<td style="text-align: left;">11%</td>
<td style="text-align: left;">566</td>
<td style="text-align: left;">50%</td>
<td style="text-align: left;">93ms</td>
</tr>
<tr>
<td style="text-align: left;">JiuJingDengElement</td>
<td style="text-align: left;">正常</td>
<td style="text-align: left;">26K</td>
<td style="text-align: left;">58K</td>
<td style="text-align: left;">2327</td>
<td style="text-align: left;">1577</td>
<td style="text-align: left;">68%</td>
<td style="text-align: left;">400</td>
<td style="text-align: left;">17%</td>
<td style="text-align: left;">91ms</td>
</tr>
<tr>
<td style="text-align: left;">JiuJingDengElement</td>
<td style="text-align: left;">lua初始化注释</td>
<td style="text-align: left;">26K</td>
<td style="text-align: left;">58K</td>
<td style="text-align: left;">739</td>
<td style="text-align: left;">8</td>
<td style="text-align: left;">1%</td>
<td style="text-align: left;">384</td>
<td style="text-align: left;">52%</td>
<td style="text-align: left;">93ms</td>
</tr>
</tbody>
</table>
<p>> 备注:反射相关耗时由 CreateLabObjectEntry.Init()产生
> 时间单位为ms(毫秒)</p>
<h3>优化思路</h3>
<ol>
<li>json的解析可以考虑用二进制保存和解析,理论上耗时会有大幅优化,参考数据:耗时为原来的1/8,GC和保存大小为原来的1/2。</li>
<li>二进制解析可以作为新增的解析方式,代码入侵较低,新资源储存额外处理即可,也能支持老器材、颗粒等数据。</li>
<li>除node.json 文件外还有 EditorComponentsInfo.json、InteractAbilityConfig.json、Menu.json、Meta.json、RegionConfig.json等,有时间也可考虑用二进制处理。</li>
<li>Lua代码部分耗时主要集中在组件添加,配置加载(json加载)等。这块可以考虑使用时加载使用(Lazy),避免初始化耗时过高。</li>
<li>资源优化,在分析耗时时,发现AB包比较大,以TanHuangCeLiJiElementModel为例,贴图11张,4个Fbx文件(动画文件),21个obj文件,总AB包大小8.12M,这块优化空间应该是较大的。</li>
<li>打包策略,避免无用和冗余资源。</li>
</ol>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=933fe2e0c5bf271979bb9d77fd5b4cec&amp;file=file.png" alt="" /></p>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=401874c2ee9ea75dcbf7297c16626eee&amp;file=file.png" alt="" /></p>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=f89293596a2596fb2de764dfdce86857&amp;file=file.png" alt="" /></p>