实验用品编辑器说明文档

实验用品编辑器说明文档


创建器材-性能分析数据和优化方案

<table> <thead> <tr> <th>作者</th> <th>QFord(350107) 、ljx(951126)</th> </tr> </thead> <tbody> <tr> <td>创建日期</td> <td>2024-2-8</td> </tr> <tr> <td>最后修改日期</td> <td>2024-3-6</td> </tr> </tbody> </table> <h1>性能分析数据</h1> <h2>1.1:Unity Profiler(Deep)</h2> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=959b22efc6b108350546d80e06dad0a5&amp;amp;file=file.png" alt="" /></p> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=a957f66e815c0cdfafc9ff93cb68a380&amp;amp;file=file.png" alt="" /></p> <p>从上图可以看出,函数的消耗,可以定位到代码,如下图所示: <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=346d1b6e00034ee89d7559157ed4bfdd&amp;amp;file=file.png" alt="" /></p> <p>详细分析具体是哪些代码行的问题,需要通过我们编写好的代码执行时长计算框架来统计和分析。</p> <h2>1.2:代码执行时长计算框架</h2> <p>输出的代码执行时长(ms)统计报表,如下图所示: &gt;此报表便于开发调试分析数据和QA汇总不同器材的性能测试数据。</p> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=162aa9993584aacfd18b3c7e264804c9&amp;amp;file=file.png" alt="" /></p> <h3>核心实现(TestUtil.cs)</h3> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=7eced4002db0e83dea8f59a1066d4119&amp;amp;file=file.png" alt="" /></p> <h3>使用样例</h3> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=aade83487babc63e35c80a152f211a2e&amp;amp;file=file.png" alt="" /></p> <h2>1.3:UWA分析</h2> <p>[UWA分析报告](<a href="https://www.uwa4d.com/u/got/perfanalysis.html/report?dataKey=202402231454300213d924169&amp;project=9038&amp;engine=1">https://www.uwa4d.com/u/got/perfanalysis.html/report?dataKey=202402231454300213d924169&amp;project=9038&amp;engine=1</a> &quot;UWA分析报告&quot;) &gt; 用户名&amp;密码 18960953359 123456Abc</p> <h2>分析结论和优化方案简述</h2> <p>通过对一些典型器材的测试,在器材创建耗时方面的主要占比情况如下:</p> <table> <thead> <tr> <th>业务模块</th> <th>性能消耗占比</th> <th>优化方案简述</th> </tr> </thead> <tbody> <tr> <td>Node.json反序列化</td> <td>20-30%</td> <td>使用Newtonsoft Json库替代Unity自带Json库、压缩JSON文件</td> </tr> <tr> <td>化学引擎</td> <td>15-30%</td> <td>初始化前置(详见后续)</td> </tr> <tr> <td>交互组件</td> <td>15-30%</td> <td>待组件负责人分析和处理</td> </tr> <tr> <td>通用能力组件</td> <td>10-30%</td> <td>待组件负责人分析和处理</td> </tr> </tbody> </table> <p>&gt; 上述的分析结论的来源数据,详见如下链接: [器材创建性能分析统计表](<a href="https://kdocs.cn/l/crKUoQA9Dn5y">https://kdocs.cn/l/crKUoQA9Dn5y</a> &quot;器材创建性能分析统计表&quot;)</p> <p>(7个)器材创建耗时统计表(含首次和第二次创建器材耗时对比)、各器材创建详细耗时函数、Node.Json优化测试对比数据</p> <p>&gt; 第二次创建器材耗时大大降低原因: 1、引擎组件第一次初始化比较耗时,之后因为数据有缓存,创建和加载速度大幅加快 2、Node.Json文件反序列化过程也有一些缓存,第二次能加快速度</p> <h1>优化方案</h1> <h2>1:Node.json反序列化优化</h2> <h6>使用Newtonsoft Json库替代Unity自带Json库(陈智龙同学提供的方案)</h6> <p>效果显著,对单行的Json文件耗时可缩短50%以上,对多行Json文件耗时可缩短90%以上。</p> <h6>压缩Json文件,多行变为单行</h6> <p>经测试,在使用Unity自带Json库的情况下,可缩短90%以上Node.json反序列化的时间 若使用Newtonsoft Json库,则时间只有略微缩短,可忽略不计。</p> <p>&gt; 上述隶属于[物件播放组件]的优化已经完成,其他组件有类似问题也可以参考和借鉴。</p> <h2>2:化学引擎优化</h2> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=2b040485d480df7a6d7654c9fe826736&amp;amp;file=file.png" alt="" /> 化学引擎在第一次创建器材的时候,会初始化一堆处理器,其中解析反应规则最耗时。但这些应该是一次性的,也就是说创建第二个器材的时候就不会执行。可以考虑提前在化学引擎初始化的时候去初始化处理器,而不是在第一次创建器材的时候。</p> <p>&gt; 上述引擎初始化的优化已完成</p> <h2>3:交互组件优化</h2> <h2>4:通用能力组件优化</h2> <h2>5:分帧创建器材</h2> <p>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;通过对创建器材性能的分析,以及分析耗时较高的方法,发现单纯优化方法以降低耗时的可操作空间较小。因为很多耗时较多的业务都是必须要做的且存在性能瓶颈,比如NodeJson反序列化、交互配置文件反序列化、动态挂载各种组件,若是同时创建几十个器材,就算方法优化得再好,也会存在明显卡顿。 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;因此,建议尝试分帧处理多个器材的创建,如果效果仍不明显,可继续对单个器材的创建也进行分帧处理。以下表为例,调用方法同时创建36个器材,使应用卡顿了4秒多无法操作,若能接受在一段时间内将器材陆续加载出来,则卡顿现象会有明显改善。 <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=52bfc71ba2cd957c47bb3b72290aa98d&amp;amp;file=file.png" alt="" /></p> <h2>后续</h2> <p>2024-3-6 给了智龙一个优化后的版本,后续计划根据他的反馈再决定是否进行下一步的优化。</p>

页面列表

ITEM_HTML