闲鱼技术2022年度白皮书-KUN主题-大终端领域的新物种-KUN(上)

简介: 闲鱼技术2022年度白皮书-KUN主题-大终端领域的新物种-KUN


 

作者:吉丰

 

一、 KUN的背景/动机

 

即使已经到了2022年,在面向复杂多变的用户端开发领域,我们依然绕不开一个问题?我们选择什么技术更适应我们的业务场景,不管是通用还是独特。这回到一个问题的原点,每一种技术都有它的局限性(短板)。

 

1. 单一技术的缺陷

 

1) Native技术的局限性

 

尽管Native技术在用户体验上有绝对的天然优势,但在工程化,部署效率,敏捷上又有天然的短板。

 

工程化效率低

 

工程复杂度高,由于天然的把所有的业务集成在一个工程里,依赖复杂性,工程复杂度高

编译效率低,切环境,编译打包,效率低。这显著影响实际的开发效率。

 

部署效率低

 

由必须依赖用户的安装更新,生效周期长,导致实际迭代效率慢。

 

2) Web技术的局限性

 

尽管Web技术是当今最流行的GUI技术,但受限于浏览器架构/渲染模型,使其在体验上有天然的劣势。特别是在强调“图片/动画/视频控制、长列表容器、多Tab容器”等场景显得力不从心。

 

涉及底层基础能力,必须依赖Native技术的增强。

 

更广义而言,这是C/S架构和B/S架构技术对比的缩影,历史上从以C/S架构为开始,到以B/S架构的大流行。而PC互联网时代后,Native技术和Web技术在移动互联网上的继续相爱相杀。

 

2. 烟囱式多种技术并存的挑战

 

技术上的乌托邦,理想的情况,我们期望日常的业务软件开发关注于业务本身的复杂度(比如前台而言关注与,核心关注于业务模型复杂度/展示复杂度/交互复杂度),而不是更多的关注于技术工具本身的复杂性。

 

但实际的情况却相反,我们往往考虑技术工具的问题,比如什么场景下适合使用什么技术?什么时候使用native技术,什么时候使用web技术什么时候使用非web的跨端技术,什么时候使用某些特定领域的技术,随着业务场景越来越多,越来越复杂,我们的技术工具的数量也在不断的上升。

 

每多增加一种技术工具,背后需要额外的投入,

 

如何学习熟练掌握一种技术工具。

如果不断优化提升技术工具,使之在质量和效率上不断提升。

技术工具之间的耦合关系使得复杂度进一步上升,为了解决这部分复杂度所需要的额外的成本。

组织效率的降低,容易形成更多的开发瓶颈。

 

技术的割裂,对中小规模的技术团队的影响更加明显,因为技术的割裂,更加容易产生因为技术本身导致的人力瓶颈。

 

有没有一种技术,在效率、体验、通用性取得最大化的平衡。甚至打破传统按技术栈粒度进行划分的职能边界,统一到普遍意义上的终端开发工程师职能上。

 

3. KUN是什么

 

KUN是一个让开发者使用Javascript,HTML,CSS进行开发,使用Flutter进行增强的跨端开发框架。

 

它最早的雏形是来自Kraken,正如鲲这个名字所内涵的:北冥(Kraken)有鱼,其名为鲲(Kun)。Kraken将Flutter技术引入并应用于Web技术栈,而在和Kraken团队的交流中吸取了大量的优秀知识。

 

但我们并不希望去做一个仅仅基于Flutter渲染带裁剪的Web浏览器。相反,我们试图去完美融合Web生态和Flutter生态。我们希望在面向中小规模的大前端/大终端的组织中,找到一种真正适合的,长期性的,通用型解决方案。来解决包括我们闲鱼技术团队在内的,大前端/大终端所面临的前端用户体验低、客户端效能低、团队技术割裂、技术协作成本高等一系列问题。

 

KUN项目组是一个技术栈高度互补的团队,包含flutter、前端、native多技术栈的关键专家开发者,在这个过程中,缺少任何一方都将大幅度的降低所能达到的上限。

 

就像KUN Logo所隐喻的,它既像一条大鱼又像一个猫身,它是对立和统一的结合体。

 

二、 KUN的独特价值

 

既然已经有了React Native,WEEX2.0,Kraken等跨平台开发框架,我们为什么还需要KUN?

 

React Native试图去混合和连接JS生态和OEM的GUI生态(Android生态&iOS生态)。但最大的问题在于其不同OEM生态之间天然的差异,去抹平它们之间的差异,是一件极具挑战的目标。而舍弃操作系统GUI生态,试图去重新构建一套独立完整的GUI系统去对接JS生态,是一件非常有抱负的目标。它可能意味着在对齐W3C标准上的更高的上限,但同样这个方向上,挑战重重。


1. KUN站在巨人的肩膀上,做出独特的价值-开放性

 

image.png


1) KUN从一开始就不试图去达到完备的W3C的标准。

 

接受达到W3C标准(包括html标签标识,CSS样式标准,WebAPI标准)的必要的子集对我们而言充分的。我们在一开始就对我们的目标做取舍和精确的定义。

 

2) KUN基于Flutter GUI系统和其生态,以极低的扩展成本,向上层JS运行时提供大量丰富的扩展标签/组件。

 

KUN不试图去构建全新独立的GUI系统,也不去试图抹平多个操作系统GUI之间的差异。最大程度结合JS技术/生态和Flutter技术/生态,取长补短,优势互补。

 

KUN的开放性是KUN最显著的特征。通过更加开放和轻量化的容器设计和实现。KUN试图通过更加开放性的架构设计,去混合兼顾JS&Flutter。开放性,技术上意味着

 

有更广泛的通用性

更大的生态/社区的支持

有更敏捷的响应性

有更长期的成长性

 

结合闲鱼技术在flutter技术领域的天然优势,去混合连接JS生态&Flutter生态,通过更加开放&更加轻量化的设计,在效率,体验,通用性上去取的最佳平衡。

 

基于将Flutter生态融入到Web生态中,同时高度的开发性,有着更加广泛的通用性,使得从技术和组织的各种为政,从烟囱式的多技术栈,有机会向分层的技术融合转变,走向技术统一,最后进一步到组织融合成为可能。不再按细粒度的技术栈划分职能岗位,而是统一为职能更大类的终端开发工程师或者开发工程师转变。

 

这尤其在中小规模的技术团队组织中,产生更加显著的价值。

 

当然就这一融合目标的达成,需要考虑至少三个因素:

 

技术方案能不能行

组织内同学愿不愿意

外部环境趋势是否符合

 

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

相关文章
|
Java Maven 流计算
Flink1.13.3和FlinkCDC2.4.1的guava冲突怎么解决
Flink1.13.3和FlinkCDC2.4.1的guava冲突怎么解决
429 0
|
弹性计算 负载均衡 网络协议
负载均衡(SLB)使用最佳实践
负载均衡(Server Load Balancer,下文简称 SLB)的引入,可以降低单台云服务器 ECS(下文简称 ECS)出现异常时对业务的冲击,提升业务的可用性。同时,结合弹性伸缩服务,通过动态调整后端服务器,可以快速对业务进行弹性调整(扩容或缩容),以快速应对业务的发展。
15310 0
|
人工智能 运维 前端开发
【CodeBuddy】三分钟开发一个实用小功能之:3D卡片翻转画廊
在数字化快速发展的今天,编程成为推动行业进步的核心力量。本文分享了使用CodeBuddy开发一个3D卡片翻转画廊网页的经历。从需求描述到代码生成,CodeBuddy展现出强大的理解能力和高效性,生成的代码结构清晰、逻辑严谨。它不仅支持多种语言和技术栈,还为开发者提供了便捷的解决方案。未来,CodeBuddy可通过增加用户反馈机制和优化代码性能进一步提升体验。附上的完整代码展示了HTML、CSS和JavaScript的结合应用,实现精美的界面与流畅交互效果。
351 15
【CodeBuddy】三分钟开发一个实用小功能之:3D卡片翻转画廊
|
人工智能 运维 自然语言处理
2025保姆级JupyterLab 4.0安装指南|全平台部署+AI编程环境配置
JupyterLab 是下一代交互式计算开发环境,2025年发布的4.0版本新增多语言内核支持(Python/R/Julia/JavaScript一键切换)、实时协作功能、AI辅助编程(集成GPT-5代码补全与错误诊断)和可视化调试器等特性。本文详细介绍其技术定位、跨平台安装方案、安装流程、高阶功能配置、典型应用场景及故障排查指南,帮助用户高效使用JupyterLab进行开发。
|
机器学习/深度学习 人工智能 算法
Qwen2.5-Math: 世界领先的数学开源大语言模型
Qwen2.5-Math: 世界领先的数学开源大语言模型
|
安全 Linux 程序员
一招解决开发环境问题——远程容器开发指南
使用C++作为主要开发语言的程序猿们应该会认同搭建开发环境是一件烦人的事情。笔者在运营iLogtail开源社区的过程中发现开发和调试环境问题也是成员问的最多的问题之一。利用 VSCode 的 Remote-Development 插件可以使整个开发环境运行在远程容器中,利用容器技术做到一致、可移植、天然隔离的环境开发编译。本文由浅到深带大家搭建这样的远端容器开发环境。
|
机器学习/深度学习 数据可视化 算法
机器学习中的特征选择与降维技术
机器学习中的特征选择与降维技术
652 0
|
Linux Android开发 iOS开发
Android经典实战之Kotlin Multiplatform跨平台开发
KMP(Kotlin Multiplatform)是由JetBrains开发的开源技术,让开发者能在多平台间高效重用代码,保留原生编程优势。适用于Android/iOS应用、多平台库及桌面应用开发。KMP支持代码共享、预期与实际声明机制,具备灵活性、稳定性和性能优势。通过Compose Multiplatform可实现跨平台UI共享。开发者可访问官方文档开始学习。
1121 1
|
存储 Windows
移动硬盘数据恢复 详细操作指南 (6种方法)
很多情况下,移动硬盘丢失的数据是可以恢复的。本文将给大家详细介绍移动硬盘数据恢复的完整过程,帮助大家有效应对数据丢失问题。
|
JavaScript Java Apache
【SpringBoot】Maven 版本管理与 flatten-maven-plugin 插件的使用及分析
【SpringBoot】Maven 版本管理与 flatten-maven-plugin 插件的使用及分析
6664 0

热门文章

最新文章