当前位置: 首页 > 网络应用技术

如何继续突破绩效?| DX R&D模型

时间:2023-03-07 01:19:30 网络应用技术

  DX的全名是Dinamicx,目前在TAOBAO甚至整个Ali组中广泛使用。核心优势是性能和稳定性。在过去的几年中,TAOBAO/Group涉及DX的其他外部文章,但DX从未对外界进行完整的介绍。对于外界来说,这两个字母非常神秘。此系列文章“ DX R&D模型”将拉下其神秘的面纱,看看DX在过去两年中所做的事情。

  本文主要解释了在追求最终性能体验的过程中DX的性能瓶颈和实践经验。

  DX作为横形动态方案,由逻辑和视图隔开,是组中高性能动态框架的代表。它的表现最接近本地。在业务的重点上,技术选择也不同,并且没有绝对的最佳解决方案。逻辑动力学,DX是当前的首选。

  为了追求最终的绩效体验:DX:

  通过分析DX的管道,我们发现DX的性能有进一步的改进,例如

  基于上述分析过程,当前面对DX的性能瓶颈主要分为两个部分:虚拟节点树和查看渲染。

  通常,由于DX服务器的特征预处理和虚拟节点,通常,虚拟节点的主线程时间不高,但是当业务模板更加复杂时,例如包含大量表达式和复杂的嵌套层次结构,方案,虚拟节点操作时间的比例可能超过40%。在由DX卡构建的完整页面表面场景中,虚拟节点的主要线程甚至消耗了10%以上,因此迫切需要优化虚拟节点时间。

  在DX中,开发人员在XML中编写的组件将被解析为“三棵树”,然后传递到渲染的真实平台视图。它们是:原型树,展开的树木和扁平树。渲染管道将运行二进制在虚拟节点树上的分析,表达分析,测量,布局和相等的步骤。分离和重组可以在步骤之间分配,这也为异步管道奠定了基础。

  从以前的流程分析中,我们可以理解DX的虚拟节点无法运行实际的平台视图,因此我们可以充分利用CPU用于多线程管道计划的多核容量,以及非非CPU的工作以及非CPU的工作- 主线程的必要职业与工作一样短?根据上述分析,我们设计了DX管道的异步能力。

  管道的整体思维的简化过程如下:虚拟节点上的负载,表达分析,测量和布局的操作与多核CPU的功能异步。

  我们通过修改DX内的渲染管道来提供各种可扩展点。该组件可以渲染平台以在OnPrefetch异步界面中提前渲染时间耗尽的操作。它只需要在渲染阶段时执行与UI相关的过程。总体流程图如下:

  在DX内部,具有管道的异步能力,与图片组件中的UI无关的URLPARSER步骤将提前在Onprefetch中提前进行。

  由于DX的丰富生态包含一个巨大的业务团体自定义组件,因此该功能被用作DX基本扩展接口,并且可以通过自定义组件定制业务方,以进行预载。

  以上主要引入了异步管道的核心思想。它还为外部容器和DX自行制造的容器提供不同的访问策略:

  使用管道异步方案在虚拟节点的操作上执行异步执行,从而大大降低了主线程压力。,并且在大多数情况下,在真实视图渲染阶段中都在增加时间 - 可以通过系统的多线程功能充分利用它,并将时间 - 耗时的绘图操作放在异步线程执行上吗?设计并实现了异步的绘图框架,以在绘制CPU时解决主线程的消耗,而自我检查和自我绘制丰富的文本组件也已成为异步绘图框架的第一个实际应用程序场景。

  系统CALAY通常具有两种绘图方法,该方法使用纹理或手动图直接使用。DX内部异步绘图框架的简单原理的序列图如下。在接收系统层的显示消息时,纹理生成步骤将在完成异步线程完成后提交给主线程。

  基于DX的系统绘制过程,模仿系统实施,企业可以选择直接实施DX为处理和绘制提供的位图或画布。在此过程的中间,有更多的外向扩展点来满足不同的自定义和商务方的时机监视需求。由于系统绘图框架核心图是线程安全性,并且自然可以为我们提供异步图的基础,因此可以将绘图步骤放在异步线程上。当提交任务时,交易时时间由侦听系统提交,将绘图任务临时存储在每个Runloop中,然后在系统提交正时从主线程提交给RenderServer。

  在DX的丰富生态中,不仅有大量的构建组件,而且还有一个非常大的开发人员自定义组件。DX系统下的技术转换如何不影响现有过程,并且易于开发扩展开发人员的问题是必须考虑的问题。因此,在设计异步绘图框架时,采用了面向接口的编程的想法,并且DX的原始渲染逻辑没有入侵,并且还减少了相关的耦合关系之间的依赖耦合关系。扩展很强,每个步骤的开发人员都有一个相应的扩展点。ASYNCDISPLAY分类为DisplayLayer的DisplayLayerDelegate,以实现真实的同步/异步自定义绘图电容该业务可以直接重写自定义节点视图的外行,或直接继承DXBASEVIEW以获得异步图形相关的功能。

  DX之前没有提供统一的通用文本能力,并且对业务方进行了包装和定制以自定义丰富的文本组件,其中大多数都是为了满足业务团体的自身需求。它们具有强大的定制属性,无法实现普遍性,并且无法保证其性能。一般丰富的文本能力自然可以用作DX中异步绘图框架的测试字段。

  众所周知,iOS系统上的Uilabel在CPU上被绘制为位图,然后将其交给GPU进行混合和合成。在大量的图形方案中,例如Singtao信息流场,它包含在这种情况下,文本图的总比例超过10%.1。由于UIKIT的默认非线程安全性,因此在主线程上执行默认文本图。2.由于DX渲染管道机制,您需要测量,布局然后进行渲染。它还导致文本进行两次测量,该文本具有较高的主螺纹占用,这对帧速率具有很大的负面影响。

  iOS上的自定义绘图文本可以选择TextKit / CoreText。从iOS7开始,Apple为开发人员提供了更好的包装文本套件,并替换了构建的 - 在uitextview,uilabel,uilabel等构建的布局方法为textKit。

  根据上述特征和DX丰富文本组件的需求,没有特别复杂的布局,我们需要满足基本的图形出血和剪裁。我们选择使用TextKit来实现丰富的文本组件。

  一般丰富文本能力的整体分层结构设计如下:

  在Android中,实际上是根据布局测量和绘制Android Native TextView。当它传递到SpannableString中时,Layout(textline)将分析在SpannableString中配置的每种样式,并使用特定的跨度在绘制之前使用特定的跨度修改涂料属性。.dx的丰富文本组件也基于SpannableString解决方案,但它不直接使用TextView。取而代之的是,使用基础布局在视图层上实现点击事件响应。一方面,文本视图中某些不必要的功能的不必要的时间消耗很方便,对于自定义截距的自定义切割 -。整体架构级别与iOS并没有太大不同,iOS不会在此处重复。

  借助通用文本容量+异步绘图框架,在iPhone6上复杂的丰富文本方案中,平均帧速率可以保持在55+,可以显着改善。

  当前的移动地图和视频用作高频使用功能,并且在信息流场景中有很大比例。同时,这种功能对于设备CPU.PHENOMENON减少和卡住现象也很明显。等等等是高频使用功能,因此DX团队在框架级别上摘要一组通用广播控制框架,并致力于解决此处的求解,在此多video中缺乏广播控制功能以及浪费CPU资源的问题。

  出发资源控制框架的总体设计是由分层设计组成的:

  总体计划使用OC的NSPROXY来转发消息转发,使用AOP的形式没有入侵原始逻辑过程。对于同一容器对象,您可以注册不同的方案,每个场景彼此隔离,不会互相影响。

  广播控制框架提供了两种广播控制方法,供业务团队选择,自动广播控制/手动广播控制。当使用自动广播控件时,是监视屏幕/关闭屏幕的时间,等等。

  当用户触发用户时,可以在当前屏幕上看到手动广播控件,并报告索引报告。其余过程与自动过程相同。

  通过绩效测试分析,当有更多视频资源时,它对总体CPU产生了很大的影响。以iPhone X和Hand -to -homePage信息流为例,如果您不添加广播控制功能,则可以在屏幕中使用多个视频场景轻松地在屏幕中恢复。表达频率降低的场景。加入资源控制后,,视频介质过程的整体比例对设备具有很大的积极影响,并且影响也与广播控制时间的筏值有关。在更多视频的情况下,整体CPU的总CPU比例是加入广播控件后的设备可以减少到原始的1/4至1/3。总体CPU资源优化了65%以上。

  DX的性能优化与业务团密不可分。通过分析多个复杂业务党的性能问题,DX的性能得到了进一步优化,DX的性能优化能力也尽快导出了商业方,以解决问题以解决问题以解决问题。以DX的多优化和商业团体自身优化的一部分在iPhone6的低端机器上,将主页信息的信息流进行了以下简动,帧速率已从大约提高30帧平均为50帧。用户的身体感觉同样明显:

  通过上述DX在过去一年中的表演优化摘要,我们解决了DX的许多原始性能问题:圆角,渐变颜色,文本,图片组件等,还添加了许多新的优化方法和可能性:管道尽可能短,异步图和丰富的文本,出发资源控制框架等。帮手对许多商务方进行了许多检查和解决许多绩效问题,并真正帮助商业党实现了低端的目标在多个复杂业务中,机器平均帧速率为50+。但是,作为高性能动态框架的代表,我们并没有做太多:例如:

  性能优化的方向并没有停止,我们将继续探索和采取以上问题的深入行动。

  原始:https://juejin.cn/post/7112377450436231175