闲鱼技术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

相关文章
|
19天前
|
机器学习/深度学习 安全 算法
十大主流联邦学习框架:技术特性、架构分析与对比研究
联邦学习(FL)是保障数据隐私的分布式模型训练关键技术。业界开发了多种开源和商业框架,如TensorFlow Federated、PySyft、NVFlare、FATE、Flower等,支持模型训练、数据安全、通信协议等功能。这些框架在灵活性、易用性、安全性和扩展性方面各有特色,适用于不同应用场景。选择合适的框架需综合考虑开源与商业、数据分区支持、安全性、易用性和技术生态集成等因素。联邦学习已在医疗、金融等领域广泛应用,选择适配具体需求的框架对实现最优模型性能至关重要。
269 79
十大主流联邦学习框架:技术特性、架构分析与对比研究
|
2月前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
|
15天前
|
机器学习/深度学习 缓存 自然语言处理
DeepSeek背后的技术基石:DeepSeekMoE基于专家混合系统的大规模语言模型架构
DeepSeekMoE是一种创新的大规模语言模型架构,融合了专家混合系统(MoE)、多头潜在注意力机制(MLA)和RMSNorm归一化。通过专家共享、动态路由和潜在变量缓存技术,DeepSeekMoE在保持性能的同时,将计算开销降低了40%,显著提升了训练和推理效率。该模型在语言建模、机器翻译和长文本处理等任务中表现出色,具备广泛的应用前景,特别是在计算资源受限的场景下。
318 29
DeepSeek背后的技术基石:DeepSeekMoE基于专家混合系统的大规模语言模型架构
|
2月前
|
监控 安全 API
使用PaliGemma2构建多模态目标检测系统:从架构设计到性能优化的技术实践指南
本文详细介绍了PaliGemma2模型的微调流程及其在目标检测任务中的应用。PaliGemma2通过整合SigLIP-So400m视觉编码器与Gemma 2系列语言模型,实现了多模态数据的高效处理。文章涵盖了开发环境构建、数据集预处理、模型初始化与配置、数据加载系统实现、模型微调、推理与评估系统以及性能分析与优化策略等内容。特别强调了计算资源优化、训练过程监控和自动化优化流程的重要性,为机器学习工程师和研究人员提供了系统化的技术方案。
203 77
使用PaliGemma2构建多模态目标检测系统:从架构设计到性能优化的技术实践指南
|
13天前
|
机器学习/深度学习 算法 文件存储
YOLOv11改进策略【模型轻量化】| MoblieNetV3:基于搜索技术和新颖架构设计的轻量型网络模型
YOLOv11改进策略【模型轻量化】| MoblieNetV3:基于搜索技术和新颖架构设计的轻量型网络模型
42 10
YOLOv11改进策略【模型轻量化】| MoblieNetV3:基于搜索技术和新颖架构设计的轻量型网络模型
|
8天前
|
机器学习/深度学习 算法 文件存储
RT-DETR改进策略【模型轻量化】| MoblieNetV3:基于搜索技术和新颖架构设计的轻量型网络模型
RT-DETR改进策略【模型轻量化】| MoblieNetV3:基于搜索技术和新颖架构设计的轻量型网络模型
20 4
RT-DETR改进策略【模型轻量化】| MoblieNetV3:基于搜索技术和新颖架构设计的轻量型网络模型
|
24天前
|
存储 缓存 关系型数据库
社交软件红包技术解密(六):微信红包系统的存储层架构演进实践
微信红包本质是小额资金在用户帐户流转,有发、抢、拆三大步骤。在这个过程中对事务有高要求,所以订单最终要基于传统的RDBMS,这方面是它的强项,最终订单的存储使用互联网行业最通用的MySQL数据库。支持事务、成熟稳定,我们的团队在MySQL上有长期技术积累。但是传统数据库的扩展性有局限,需要通过架构解决。
65 18
|
1月前
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
|
2月前
|
Kubernetes 安全 数据安全/隐私保护
云卓越架构:容器安全最佳实践
本次分享由阿里云智能集团解决方案架构师张玉峰主讲,主题为“云卓越架构:容器安全最佳实践”。内容涵盖容器安全的挑战、云原生容器安全架构及典型场景。首先分析了容器安全面临的问题,如镜像漏洞和权限管理。接着介绍了容器安全架构的五个维度:身份权限管理、配置安全检查、运行时防护、镜像安全检测及发布的安全管控。最后通过具体场景展示了容器身份与权限管理、密钥管理、运行时防入侵等最佳实践,强调了安全左移的重要性,确保从开发到运行的全生命周期安全覆盖。
|
2月前
|
运维 Cloud Native 持续交付
云原生技术深度探索:重塑现代IT架构的无形之力####
本文深入剖析了云原生技术的核心概念、关键技术组件及其对现代IT架构变革的深远影响。通过实例解析,揭示云原生如何促进企业实现敏捷开发、弹性伸缩与成本优化,为数字化转型提供强有力的技术支撑。不同于传统综述,本摘要直接聚焦于云原生技术的价值本质,旨在为读者构建一个宏观且具体的技术蓝图。 ####