器材加载优化-JSON优化
<table>
<thead>
<tr>
<th style="text-align: left;">最后修订日期</th>
<th style="text-align: left;">2024-6-19</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.1.0</td>
<td style="text-align: left;">创建文档</td>
</tr>
</tbody>
</table>
<h3>优化目的</h3>
<p>减轻器材加载时出现卡顿问题</p>
<h3>优化目标</h3>
<p>1.在不破坏现有流程的情况下,将部分Json格式文件保存成二进制,并在运行时加载
2.原有的Json格式仍然保留,方便维护与查看,运行时使用二进制数据</p>
<h3>优化方案</h3>
<p>1.可以优化的内容之前分析过,主要是资源加载耗时过高、<strong>解析Json数据耗时高</strong>、Lua端逻辑问题
2.本次优化主要针对Json解析和分帧处理,以减少瞬时计算量过大,造成线程卡死的问题
3.要优化的Json文件,主要为:Node.json
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=a31bbec3f8ec00130f983bdbccf312da&amp;file=file.png" alt="" />
4.改成使用MessagePack保存和加载二进制文件
以下为各种数据结构性能对比
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=da982a189506897d3b505ddf81bcfc98&amp;file=file.png" alt="" />
以下是实际项目测试的对比数据
<a href="https://www.showdoc.com.cn/eleeditor/11233814884217638">https://www.showdoc.com.cn/eleeditor/11233814884217638</a>
5.要分帧处理的部分,资源加载、Json解析、Lua逻辑</p>
<h3>优化对比数据</h3>
<p>以下是<strong>整体加载耗时</strong>对比:</p>
<table>
<thead>
<tr>
<th style="text-align: left;">项目名称</th>
<th style="text-align: left;">Json耗时 (ms)</th>
<th style="text-align: left;">二进制耗时 (ms)</th>
<th style="text-align: left;">耗时减少 (%)</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">LiuKongShiGuanJia</td>
<td style="text-align: left;">806</td>
<td style="text-align: left;">682</td>
<td style="text-align: left;">15.38</td>
</tr>
<tr>
<td style="text-align: left;">JiuJingDeng</td>
<td style="text-align: left;">1596</td>
<td style="text-align: left;">1322</td>
<td style="text-align: left;">17.17</td>
</tr>
<tr>
<td style="text-align: left;">TanHuangCeLiJi</td>
<td style="text-align: left;">1108</td>
<td style="text-align: left;">858</td>
<td style="text-align: left;">22.56</td>
</tr>
<tr>
<td style="text-align: left;">JinShuYaoChi</td>
<td style="text-align: left;">1343</td>
<td style="text-align: left;">1029</td>
<td style="text-align: left;">23.37</td>
</tr>
<tr>
<td style="text-align: left;">XiangPiSai</td>
<td style="text-align: left;">789</td>
<td style="text-align: left;">667</td>
<td style="text-align: left;">15.46</td>
</tr>
</tbody>
</table>
<p>以下是Json与二进制 GC 对比:</p>
<table>
<thead>
<tr>
<th style="text-align: left;">项目名称</th>
<th style="text-align: left;">Json GC (MB)</th>
<th style="text-align: left;">二进制 GC (MB)</th>
<th style="text-align: left;">GC 减少 (MB)</th>
<th style="text-align: left;">GC 减少 (%)</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">LiuKongShiGuanJia</td>
<td style="text-align: left;">2.7</td>
<td style="text-align: left;">1.0</td>
<td style="text-align: left;">1.7</td>
<td style="text-align: left;">62.96%</td>
</tr>
<tr>
<td style="text-align: left;">JiuJingDeng</td>
<td style="text-align: left;">1.8</td>
<td style="text-align: left;">0.4</td>
<td style="text-align: left;">1.4</td>
<td style="text-align: left;">77.78%</td>
</tr>
<tr>
<td style="text-align: left;">TanHuangCeLiJi</td>
<td style="text-align: left;">3.7</td>
<td style="text-align: left;">0.5</td>
<td style="text-align: left;">3.2</td>
<td style="text-align: left;">86.49%</td>
</tr>
<tr>
<td style="text-align: left;">JinShuYaoChi</td>
<td style="text-align: left;">4.2</td>
<td style="text-align: left;">0.8</td>
<td style="text-align: left;">3.4</td>
<td style="text-align: left;">80.95%</td>
</tr>
<tr>
<td style="text-align: left;">XiangPiSai</td>
<td style="text-align: left;">2.5</td>
<td style="text-align: left;">0.45</td>
<td style="text-align: left;">2.05</td>
<td style="text-align: left;">82%</td>
</tr>
</tbody>
</table>
<p>> 仅为Json和二进制GC对比,不是整个器材GC对比</p>
<p>以下是Json与二进制 文件对比:</p>
<table>
<thead>
<tr>
<th style="text-align: left;">项目名称</th>
<th style="text-align: left;">Json大小 (KB)</th>
<th style="text-align: left;">二进制大小 (KB)</th>
<th style="text-align: left;">大小减少 (KB)</th>
<th style="text-align: left;">大小减少 (%)</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">LiuKongShiGuanJia</td>
<td style="text-align: left;">119</td>
<td style="text-align: left;">114</td>
<td style="text-align: left;">5</td>
<td style="text-align: left;">4.20%</td>
</tr>
<tr>
<td style="text-align: left;">JiuJingDeng</td>
<td style="text-align: left;">58</td>
<td style="text-align: left;">51</td>
<td style="text-align: left;">7</td>
<td style="text-align: left;">12.07%</td>
</tr>
<tr>
<td style="text-align: left;">TanHuangCeLiJi</td>
<td style="text-align: left;">396</td>
<td style="text-align: left;">74</td>
<td style="text-align: left;">322</td>
<td style="text-align: left;">81.31%</td>
</tr>
<tr>
<td style="text-align: left;">JinShuYaoChi</td>
<td style="text-align: left;">506</td>
<td style="text-align: left;">125</td>
<td style="text-align: left;">381</td>
<td style="text-align: left;">75.30%</td>
</tr>
<tr>
<td style="text-align: left;">XiangPiSai</td>
<td style="text-align: left;">196</td>
<td style="text-align: left;">58</td>
<td style="text-align: left;">138</td>
<td style="text-align: left;">70.41%</td>
</tr>
</tbody>
</table>
<p>> 仅为Json和二进制文件对比,不是整个器材文件对比</p>
<p>记录数据如下:
>测试数据均为打开debug模式,开启Profiler的Deep Profile,并且每次测试均是独立播放记录。</p>
<p>LiuKongShiGuanJia 二进制
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=e27f0aada8ce86f724e878fa8b9853b3&amp;file=file.png" alt="" />
LiuKongShiGuanJia Json
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=78f5526cd9ee3784928e5485e61e8a99&amp;file=file.png" alt="" />
JiuJingDeng 二进制
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=9db4a431d8b2f4ca9668df68d9778bfa&amp;file=file.png" alt="" />
JiuJingDeng Json
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=d8b0687296634ad4514f71d2db39147f&amp;file=file.png" alt="" />
TanHuangCeLiJiElement 二进制
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=981ffd161c41c86797d1319674f5cbcb&amp;file=file.png" alt="" />
TanHuangCeLiJiElement Json
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=483c317ce926fd6cea891edc2d7ef4bd&amp;file=file.png" alt="" />
JinShuYaoChi 二进制
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=6a184bce5a3a00475d3be65e97f66626&amp;file=file.png" alt="" />
JinShuYaoChi Json
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=f69a112c183fd6005f8511007336fb1a&amp;file=file.png" alt="" />
XiangPiSai 二进制
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=b9a05658139c1fadba85d3a3792ad62d&amp;file=file.png" alt="" />
XiangPiSai Json
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=41d2b702b9364e4354e5eb47c7f5715d&amp;file=file.png" alt="" /></p>