闲鱼技术2022年度白皮书-KUN主题-三代终端容器KUN的首次大考【架构演进】(中)

简介: 闲鱼技术2022年度白皮书-KUN主题-三代终端容器KUN的首次大考【架构演进】

接上篇:https://developer.aliyun.com/article/1225889?spm=a2c6h.13148508.setting.16.595d4f0eudDbz0


三、 为什么用KUN渲染?

 

1. 闲鱼号端侧主要问题

 

为对症下药,对闲鱼号端容器(Weex)侧进行了全面的诊断。问题集中在性能、渲染质量、扩展能力、终端体验一致性四个方面

 

1) 性能:闲鱼号首屏(700ms)和交互性能不错,性能问题主要在内存上,Weex页面重度访问是闲鱼客户端OOM的主要场景之一。启动Weex容器会产生较大的增量内存,部分控件无回收机制也会导致内存增加,如waterfall组件加载5页带来了3000个未释放内存节点、40M内存增量

 


image.png

2) 渲染质量:在基础样式、布局、事件体系等方面和前端预期不一致,如:

 

不支持overflowvisible

不支持z-index,层叠只能通过节点位置先后实现

不支持displayinline,替代方案rich-text标签不支持line-height等基础样式控制

 

3) 终端体验一致性:闲鱼号工程中充斥着大量形如if(isIOS){xxxx}else if(isAndroid){xxx}的代码,主要作用之一按端处理,以规避渲染差异。尽管如此,目前两端仍存在不小差异。

 

4) 扩展能力:前端标准和生态起源于PC,无线设备相对于PC存在不少特性,无线端原生能力相对于纯前端也更加丰富。受容器扩展能力(成本)限制,前端无法(标准)实现部分业务认为理所当然的体验:

 

无法在元素上屏前获取元素布局信息(宽、高、位置)。大多折叠场景需要

高频动画性能不佳。绑定滚动的动画如曝光、导航透明度渐变等场景

基础控件能力缺失。如:输入框无法自动聚焦、控制聚焦时距离键盘空间;增强控件定制困难,如在嵌套滚动容器上添加回到顶部

 

为从根本解决上述问题,我们进行了新容器调研。

 

2. 渲染容器选型

 

在无线前端容器演进过程中,前端侧比较固定,框架(React、Rax等)驱动业务代码生成Virtual DOM以抽象视图结构,特定Driver/容器内置JS Module将Virtual DOM翻译为容器对应的渲染指令;容器侧主要历经Webview容器渲染->客户端渲染衍生->自绘渲染(衍生)三个阶段。其中:

 

1) Webview渲染容器。为解决Native页面双端研发成本、双端渲染不一致、无动态化、页面与客户端耦合的问题,Webview容器开始承载无线业务

 

2) 客户端渲染衍生容器(React Native、Weex 1.0)。Webview解决问题的同时引入了新的问题,渲染性能和能力边界明显逊色,故在2.0时代诞生了客户端渲染衍生容器,对接起了前端、客户端生态,用前端生态写,用客户端能力渲染。

 

 

3) 自绘渲染衍生(基于Flutter/完全自绘)。客户端渲染一定程度了解决Webview渲染性能、能力边界的问题,但将前端标准/生态“翻译”为Android/IOS标准/生态的过程,存在明显的失真,实际渲染与预期不一致,Android与IOS不一致。由此,更彻底的方法是重写渲染能力以进行统一。

 

image.png


自绘渲染方案一方面性能优于Webview,一方面渲染一致性优于Weex,闲鱼号新容器往自绘(衍生)类选型便是自然的方向。在自绘容器中,基于Kraken,闲鱼技术团队自研了KUN容器,整体思路是对接前端和Flutter生态,用前端写,在Flutter渲染。对于上文提到闲鱼号端侧的4个问题,KUN对应的解决原理如下:

 

1) 性能(内存)

 

对于已接入Flutter的客户端,打开KUN页面的增量内存只有KUN引擎本身,没有Flutter负担,KUN引擎较为轻量,内存增量相对于Webview、客户端衍生方案较少

Flutter自身提供了良好的回收能力(sliver),在无限流(瀑布流)场景,内存占用不会随内容加载无限上涨

 

2) 染质量借助Flutter像素级渲染能力,上述overflowvisible、z-index、rich-text等问题均能解决

 

3) 终端体验一致性前端对接的生态从两套变成了一套,以React Native和KUN中Text组件渲染为例:下图中,Text业务组件在 React Native下被转为了JS元素,在UIManager.js中转为RN Element RCTVirtualText。接下来就是客户端部分,RCTVirtualText在C++层通过Bridge将指令传递给Native UIManager,UIManager根据所处不同的系统环境进行组件映射,IOS映射到UITextView,Android映射到TextView。相对之下KUN则是一套映射,呈现Flutter基础组件,便能有更好的终端一致性

 

image.png


4) 扩展能力经过一层KUN Element抽象,自定义Flutter组件也可视为基础组件同等公民开放给KUN前端。如此,通过低成本对接前端、Flutter生态等方式,KUN有了灵活强大的扩展能力,以嵌套滚动容器为例:

 

image.png


以上从理论层面推导了KUN能解决上述问题,我们便开始了闲鱼号升级到KUN容器的实践。现阶段已完成升级,经过了一轮技术灰度。回顾升级过程,也像新生事物一样充斥着标准对齐、性能等诸多细节问题,但最终都悉数解决,整体体验符合预期。


接下篇:https://developer.aliyun.com/article/1225885?groupCode=idlefish

相关文章
|
3天前
|
弹性计算 运维 持续交付
探索Docker容器化技术及其在生产环境中的应用
探索Docker容器化技术及其在生产环境中的应用
21 5
|
1天前
|
Cloud Native 持续交付 云计算
云原生技术:重塑软件开发与架构的未来
在云计算的推动下,云原生技术正逐渐成为软件开发的新标准,强调利用容器、服务网格、微服务等技术实现敏捷开发与高效运维。本文探讨了云原生技术如何重塑软件开发与架构的未来,介绍了其核心概念(如容器化、微服务架构、CI/CD)及优势(如敏捷性、可扩展性、成本效益),并讨论了其在金融服务、电子商务和物联网等领域的实际应用及面临的挑战。尽管存在技术复杂性和人才短缺等问题,云原生技术仍将成为软件开发的主流趋势。
|
2天前
|
Kubernetes Cloud Native Docker
云原生技术之旅:从容器到微服务
【9月更文挑战第14天】随着云计算的蓬勃发展,云原生技术已成为现代软件开发的重要组成部分。本文将深入探讨云原生的核心概念,包括容器化、微服务架构以及它们如何共同推动企业快速创新。通过实际案例,我们将展示如何利用Kubernetes和Docker等工具构建和管理高效的云原生应用。无论你是初学者还是经验丰富的开发者,这篇文章都将为你提供宝贵的知识和技能,帮助你在云原生时代乘风破浪。
11 5
|
4天前
|
Cloud Native 持续交付 Docker
探索Docker容器化技术及其在软件开发中的应用
探索Docker容器化技术及其在软件开发中的应用
16 7
|
4天前
|
存储 虚拟化 开发者
深入理解Docker容器化技术
深入理解Docker容器化技术
26 6
|
3天前
|
Cloud Native 持续交付 Docker
探索容器化技术Docker的奥秘
探索容器化技术Docker的奥秘
16 3
|
4天前
|
运维 Cloud Native Devops
云原生架构的崛起与实践云原生架构是一种通过容器化、微服务和DevOps等技术手段,帮助应用系统实现敏捷部署、弹性扩展和高效运维的技术理念。本文将探讨云原生的概念、核心技术以及其在企业中的应用实践,揭示云原生如何成为现代软件开发和运营的主流方式。##
云原生架构是现代IT领域的一场革命,它依托于容器化、微服务和DevOps等核心技术,旨在解决传统架构在应对复杂业务需求时的不足。通过采用云原生方法,企业可以实现敏捷部署、弹性扩展和高效运维,从而大幅提升开发效率和系统可靠性。本文详细阐述了云原生的核心概念、主要技术和实际应用案例,并探讨了企业在实施云原生过程中的挑战与解决方案。无论是正在转型的传统企业,还是寻求创新的互联网企业,云原生都提供了一条实现高效能、高灵活性和高可靠性的技术路径。 ##
12 3
|
3天前
|
存储 安全 算法
探索操作系统的心脏:内核技术与架构
本文深入探讨了现代操作系统中至关重要的部分——内核。通过分析其功能、架构以及在系统性能和稳定性中的作用,揭示了内核技术背后的复杂性及其对操作系统整体表现的影响。我们将从基本概念入手,逐步深入到内核的具体实现细节,旨在为读者提供一个全面而清晰的理解框架。
|
4天前
|
存储 负载均衡 数据库
探索后端技术:从服务器架构到数据库优化的实践之旅
在当今数字化时代,后端技术作为支撑网站和应用运行的核心,扮演着至关重要的角色。本文将带领读者深入后端技术的两大关键领域——服务器架构和数据库优化,通过实践案例揭示其背后的原理与技巧。无论是对于初学者还是经验丰富的开发者,这篇文章都将提供宝贵的见解和实用的知识,帮助读者在后端开发的道路上更进一步。
|
19天前
|
Kubernetes Cloud Native Docker
云原生之旅:从容器到微服务的架构演变
【8月更文挑战第29天】在数字化时代的浪潮下,云原生技术以其灵活性、可扩展性和弹性管理成为企业数字化转型的关键。本文将通过浅显易懂的语言和生动的比喻,带领读者了解云原生的基本概念,探索容器化技术的奥秘,并深入微服务架构的世界。我们将一起见证代码如何转化为现实中的服务,实现快速迭代和高效部署。无论你是初学者还是有经验的开发者,这篇文章都会为你打开一扇通往云原生世界的大门。

热门文章

最新文章