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

相关文章
|
5天前
|
存储 缓存 安全
某鱼电商接口架构深度剖析:从稳定性到高性能的技术密码
某鱼电商接口架构揭秘:分层解耦、安全加固、性能优化三维设计,实现200ms内响应、故障率低于0.1%。详解三层架构、多引擎存储、异步发布、WebSocket通信与全链路防护,助力开发者突破电商接口“三难”困境。
|
7天前
|
机器学习/深度学习 人工智能 搜索推荐
万字长文深度解析最新Deep Research技术:前沿架构、核心技术与未来展望
近期发生了什么自 2025 年 2 月 OpenAI 正式发布Deep Research以来,深度研究/深度搜索(Deep Research / Deep Search)正在成为信息检索与知识工作的全新范式:系统以多步推理驱动大规模联网检索、跨源证据。
492 41
|
17天前
|
监控 数据可视化 数据库
低代码的系统化演进:从工具逻辑到平台架构的技术解读
低代码正从开发工具演变为支撑企业架构的智能平台,融合可视化开发、AI引擎与开放生态,实现高效构建、自动化运维与跨场景协同,推动数字化转型迈向智能化、系统化新阶段。
|
19天前
|
Java Linux 虚拟化
【Docker】(1)Docker的概述与架构,手把手带你安装Docker,云原生路上不可缺少的一门技术!
1. Docker简介 1.1 Docker是什么 为什么docker会出现? 假定您在开发一款平台项目,您的开发环境具有特定的配置。其他开发人员身处的环境配置也各有不同。 您正在开发的应用依赖于您当前的配置且还要依赖于某些配置文件。 您的企业还拥有标准化的测试和生产环境,且具有自身的配置和一系列支持文件。 **要求:**希望尽可能多在本地模拟这些环境而不产生重新创建服务器环境的开销 问题: 要如何确保应用能够在这些环境中运行和通过质量检测? 在部署过程中不出现令人头疼的版本、配置问题 无需重新编写代码和进行故障修复
210 2
|
12天前
|
存储 人工智能 搜索推荐
拔俗AI助教系统:基于大模型与智能体架构的新一代教育技术引擎
AI助教融合大语言模型、教育知识图谱、多模态感知与智能体技术,重构“教、学、评、辅”全链路。通过微调LLM、精准诊断错因、多模态交互与自主任务规划,实现个性化教学。轻量化部署与隐私保护设计保障落地安全,未来将向情感感知与教育深度协同演进。(238字)
|
27天前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路
|
3月前
|
缓存 Cloud Native Java
Java 面试微服务架构与云原生技术实操内容及核心考点梳理 Java 面试
本内容涵盖Java面试核心技术实操,包括微服务架构(Spring Cloud Alibaba)、响应式编程(WebFlux)、容器化(Docker+K8s)、函数式编程、多级缓存、分库分表、链路追踪(Skywalking)等大厂高频考点,助你系统提升面试能力。
179 0
|
10月前
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。
|
11月前
|
Cloud Native Devops 云计算
云计算的未来:云原生架构与微服务的革命####
【10月更文挑战第21天】 随着企业数字化转型的加速,云原生技术正迅速成为IT行业的新宠。本文深入探讨了云原生架构的核心理念、关键技术如容器化和微服务的优势,以及如何通过这些技术实现高效、灵活且可扩展的现代应用开发。我们将揭示云原生如何重塑软件开发流程,提升业务敏捷性,并探索其对企业IT架构的深远影响。 ####
283 3

热门文章

最新文章