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

相关文章
|
7天前
|
机器学习/深度学习 缓存 自然语言处理
深入解析Tiktokenizer:大语言模型中核心分词技术的原理与架构
Tiktokenizer 是一款现代分词工具,旨在高效、智能地将文本转换为机器可处理的离散单元(token)。它不仅超越了传统的空格分割和正则表达式匹配方法,还结合了上下文感知能力,适应复杂语言结构。Tiktokenizer 的核心特性包括自适应 token 分割、高效编码能力和出色的可扩展性,使其适用于从聊天机器人到大规模文本分析等多种应用场景。通过模块化设计,Tiktokenizer 确保了代码的可重用性和维护性,并在分词精度、处理效率和灵活性方面表现出色。此外,它支持多语言处理、表情符号识别和领域特定文本处理,能够应对各种复杂的文本输入需求。
38 6
深入解析Tiktokenizer:大语言模型中核心分词技术的原理与架构
|
1月前
|
机器学习/深度学习 缓存 自然语言处理
DeepSeek背后的技术基石:DeepSeekMoE基于专家混合系统的大规模语言模型架构
DeepSeekMoE是一种创新的大规模语言模型架构,融合了专家混合系统(MoE)、多头潜在注意力机制(MLA)和RMSNorm归一化。通过专家共享、动态路由和潜在变量缓存技术,DeepSeekMoE在保持性能的同时,将计算开销降低了40%,显著提升了训练和推理效率。该模型在语言建模、机器翻译和长文本处理等任务中表现出色,具备广泛的应用前景,特别是在计算资源受限的场景下。
520 29
DeepSeek背后的技术基石:DeepSeekMoE基于专家混合系统的大规模语言模型架构
|
1月前
|
机器学习/深度学习 算法 文件存储
YOLOv11改进策略【模型轻量化】| MoblieNetV3:基于搜索技术和新颖架构设计的轻量型网络模型
YOLOv11改进策略【模型轻量化】| MoblieNetV3:基于搜索技术和新颖架构设计的轻量型网络模型
111 10
YOLOv11改进策略【模型轻量化】| MoblieNetV3:基于搜索技术和新颖架构设计的轻量型网络模型
|
1月前
|
机器学习/深度学习 算法 文件存储
RT-DETR改进策略【模型轻量化】| MoblieNetV3:基于搜索技术和新颖架构设计的轻量型网络模型
RT-DETR改进策略【模型轻量化】| MoblieNetV3:基于搜索技术和新颖架构设计的轻量型网络模型
38 4
RT-DETR改进策略【模型轻量化】| MoblieNetV3:基于搜索技术和新颖架构设计的轻量型网络模型
|
9天前
|
安全 容灾 网络安全
深度用云——释放企业潜能 | 网络先行——阿里云网络卓越架构白皮书正式发布
深度用云——释放企业潜能 | 网络先行——阿里云网络卓越架构白皮书正式发布
|
12天前
|
监控 Kubernetes Cloud Native
基于阿里云容器服务Kubernetes版(ACK)的微服务架构设计与实践
本文介绍了如何基于阿里云容器服务Kubernetes版(ACK)设计和实现微服务架构。首先概述了微服务架构的优势与挑战,如模块化、可扩展性及技术多样性。接着详细描述了ACK的核心功能,包括集群管理、应用管理、网络与安全、监控与日志等。在设计基于ACK的微服务架构时,需考虑服务拆分、通信、发现与负载均衡、配置管理、监控与日志以及CI/CD等方面。通过一个电商应用案例,展示了用户服务、商品服务、订单服务和支付服务的具体部署步骤。最后总结了ACK为微服务架构提供的强大支持,帮助应对各种挑战,构建高效可靠的云原生应用。
|
11天前
|
监控 Cloud Native Java
基于阿里云容器服务(ACK)的微服务架构设计与实践
本文介绍如何利用阿里云容器服务Kubernetes版(ACK)构建高可用、可扩展的微服务架构。通过电商平台案例,展示基于Java(Spring Boot)、Docker、Nacos等技术的开发、容器化、部署流程,涵盖服务注册、API网关、监控日志及性能优化实践,帮助企业实现云原生转型。
|
3月前
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。
|
4月前
|
Cloud Native Devops 云计算
云计算的未来:云原生架构与微服务的革命####
【10月更文挑战第21天】 随着企业数字化转型的加速,云原生技术正迅速成为IT行业的新宠。本文深入探讨了云原生架构的核心理念、关键技术如容器化和微服务的优势,以及如何通过这些技术实现高效、灵活且可扩展的现代应用开发。我们将揭示云原生如何重塑软件开发流程,提升业务敏捷性,并探索其对企业IT架构的深远影响。 ####
91 3
|
4月前
|
Cloud Native 安全 数据安全/隐私保护
云原生架构下的微服务治理与挑战####
随着云计算技术的飞速发展,云原生架构以其高效、灵活、可扩展的特性成为现代企业IT架构的首选。本文聚焦于云原生环境下的微服务治理问题,探讨其在促进业务敏捷性的同时所面临的挑战及应对策略。通过分析微服务拆分、服务间通信、故障隔离与恢复等关键环节,本文旨在为读者提供一个关于如何在云原生环境中有效实施微服务治理的全面视角,助力企业在数字化转型的道路上稳健前行。 ####

热门文章

最新文章