面向万物智联的应用框架的思考与探索

news2024/11/23 22:05:52

本文转载自 OpenHarmony TSC 官方微信公众号峰会回顾第3期 | 面向万物智联的应用框架的思考与探索

演讲嘉宾 | 余枝强

回顾整理 | 廖   涛

排版校对 | 李萍萍

嘉宾简介

余枝强,OpenHarmony技术指导委员会跨平台应用开发框架TSG负责人,华为终端软件部应用程序框架首席架构师,华为Web技术C-TMG主任。主导 OpenHarmony / HarmonyOS UI 开发框架 ArkUI 的整体规划、架构设计及实现;也曾主导华为浏览器内核、快应用引擎的从零到一构建。在加入华为之前,任职于英特尔公司,曾负责移动平台的 HTML5 引擎—— Crosswalk 开源项目、XML 高性能处理器等项目。

文章内容来源

第一届开放原子开源基金会OpenHarmony技术峰会——编程语言及应用框架分论坛

视频回顾

【峰会回顾第3期 | 面向万物智联的应用框架的思考与探索-余枝强-哔哩哔哩】 https://b23.tv/ijSiFUb

正 文 内 容

应用框架,是操作系统连接开发者生态,实现用户体验的关键基础设施。业务的飞速发展促进了应用框架不断演进和变化。在万物智联的新场景下,应用框架应该如何设计呢?华为终端开发框架首席架构师余枝强,在第一届OpenHarmony技术峰会上给出了几点思考。

01业界应用框架的演进

应用是用户使用操作系统/设备的入口,应用框架则是应用开发和运行的基础设施。以移动端为例,一个典型的应用结构一般包括用户界面、业务逻辑、共享库以及包清单文件等部分。

  1. 用户界面以及相应的业务处理逻辑。这里主要包括构建用户界面所需的UI(User Interface)组件,布局,动效,事件交互响应处理,所需的资源(图片/字体等),以及结合UI呈现的业务逻辑处理等。从运行时的维度来看,它主要对应了系统运行环境中的UI框架(含语言运行时),以及部分的系统能力API (Application Programming Interface);
  2. 共享库。这里主要包括开发者封装好的SDK(Software Development Kit),以及使用的三方库等。从运行时维度来看,它主要对应了系统能力API以及语言运行时,如果共享库涉及UI的话,还对应了UI框架;
  3. 包清单文件。这里主要包括应用包的结构描述,权限声明等,它主要对应了系统运行环境中的包管理,应用生命周期/权限管理/进程管理等。

其中,UI框架的主要组成如下图所示:

  • 开发模型:对开发者提供的开发范式、UI组件/API能力、编程语言等,重点体现的是开发效率与难易程度;
  • 运行框架:UI界面渲染及交互的基础能力框架,将开发者的程序运行在具体系统平台上,包括应用整体渲染处理流程,语言逻辑执行流程,以及平台能力扩展机制,重点体现的是应用运行的性能体验;
  • 平台适配:承载框架的具体操作系统或平台的适配层。

一般而言,应用框架中的包管理、生命周期/权限管理,和具体的操作系统关联较紧,并相对稳定;能力API则是操作系统对设备能力的封装,主要影响应用使用设备的能力。UI框架以及相应的编程语言则是影响用户体验(包括开发和运行体验)的关键要素,尤其随着移动平台的不断普及以及移动设备的差异,移动平台上的UI框架(含编程语言)是业界不断演进的重点领域。

近十年来,业界UI编程框架围绕着更好的开发效率,更好的运行体验以及适应更多的平台不断发展演进。其中有三个关键的时间节点:

  1. 2013年,Facebook发布的React.js第一次综合的将数据绑定,虚拟DOM(Document Object Model)等机制引入前端开发框架设计中。开发者只需声明好相应的数据和UI的绑定,之后由框架来跟踪数据的变化,并通过虚拟DOM树的对比找出变化点,从而实现界面的自动更新,而无需开发者手动基于DOM 编程。
  2. 2018年,Google发布的Flutter则是个重要的分界点。Flutter融合了Dart语言,是第一个深度融合了语言的较为完整的声明式开发框架,实现了完全通过数据驱动的UI变更。另外,Flutter通过基于Skia的自绘制引擎实现了高性能的跨平台的平台一致性的渲染能力,并提供了Hot Reload机制提升开发测试体验。不过,Flutter的整体设计哲学偏向底层的灵活性 – 主要通过底层的细粒度的能力供开发者自由组合,另外,Google对Dart语言的简洁度的改进较少,整体上开发的简洁度以及对用户的友好度不足。
  3. 2019年,Apple SwiftUI的推出,意味着主流OS的原生应用框架开始逐步往声明式开发方式迁移。SwiftUI推动了Swift语言特性扩展实现了更加简洁自然的UI描述,并通过XCode开发工具的所见即所得的高效预览能力进一步提升开发效率。同时,SwiftUI也是真正意义上开始通过一套框架,逐步统一Apple生态中的不同的设备/OS上的应用开发。另外,2019年Google将更简洁的Kotlin语言升级为Android首选的编程语言,并在2021年推出基于Kotlin的应用框架Jetpack Compose, 同时结合开发工具Android Studio逐步往多设备以及跨平台演进。
  • 总体而言,移动端应用框架的演进包含以下几个关键特征:从命令式UI开发逐步演进到声明式UI开发;
  • UI和编程语言的融合从相对松散演进到逐步紧密;
  • 开发范围从单设备演进到多设备,从单平台演进到多平台。

02万物智联下的应用框架的架构设计思考

目前,在万物智联的新场景下,智能设备的数量和种类越来越多,场景也越来越复杂,存在着新需求和新挑战:1.设备间具有不同形态:各设备的屏幕不同,其分辨率、长宽、形状、尺寸等均不相同;2.设备自身的交互方式不同:存在触控、键鼠、遥控、语音、3D手势等多种形式;3.设备间具有不同的能力:各设备的CPU、GPU、NPU、蓝牙等处理能力不同,且RAM、ROM的规格也不相同;4.设备之间的交互方式也不相同:例如无缝流转、协同等。此外,跨OS平台,动态内容部署能力也是重要的需求。

如何设计相应的应用框架来应对挑战呢?以下将从语言选型和框架设计两个维度来讨论。

2.1►►语言选型

如图所示的排行榜显示了在2012年至2022年的区间里,最活跃、热度最高的前20名编程语言,由图可以看出JavaScript和TypeScript的排名是遥遥领先的,本身拥有非常好的生态基础。但是,JavaScript和TypeScript也有一定的缺陷,比如缺失基于类型系统的运行时优化,AOT能力,精细化类型以及细粒度的并行化等。

2.2►►框架设计

相应的,现有框架如Web引擎、React Native、Flutter等在各自领域都具备一定的优势,但也存在性能体验及其与生态难平衡、HTML+CSS+JS三段式开发方式和业界领先的声明式开发(SwiftUI)相比有较大差距的问题。

2.3►►设计思考

尽管业界在语言、框架等各领域都持续进行了相关改进,但始终缺乏系统性的跨越。对于单平台应用框架来说,需要解决开发效率(开发范式、语言、基础库、三方库、调试调优、预览等)、性能体验(性能、内存、功耗、能力完备度等)以及跨设备(不同设备的UI适配和能力适配)等核心问题;对于跨平台应用框架来说,需要解决不同平台的代码复用度、性能和体验不一致等核心问题。此外,还需要考虑动态化内容部署机制和应用部署等因素。

03ArkUI的创新和实践

OpenHarmony应用框架围绕如何解决上述问题,设计了ArkTS开发语言以及ArkUI开发框架,下面将从语言和框架两个维度进行介绍。

3.1►►OpenHarmony生态开发语言-ArkTS

OpenHarmony生态开发语言ArkTS在JavaScript和TypeScript的基础上,围绕着极简表达、极致性能的最终目标进一步演进。改进了JavaScript和TypeScript的运行时,优化了类型信息,扩展了声明式UI语法,以及轻量级并行能力。后续会持续演进分布式、严格类型等相关能力。

3.2►►ArkUI开发框架

ArkUI整体架构如图所示。最上层提供了自研声明式UI范式,也支持类Web范式;中间层为方舟编译器和运行时、声明式UI后端引擎以及渲染引擎,下层为平台适配层和平台桥接层。此外,ArkUI开发框架还配套了相应的IDE开发工具以及工具链,提升开发体验。

ArkUI的声明式范式通过语法扩展方法,提供了装饰器、自定义组件、UI描述、状态管理、内置组件、属性方法以及事件方法等模块,可以根据用户需求灵活组合,从而形成定制化界面。ArkUI的声明式范式具备简洁自然声明式语法,统一UI表达;多态组件/动态布局,简化多设备UI适配;多维度状态管理,简化数据传递&UI变更等关键特征。其中,多维度状态管理包括组件、页面、全局以及分布式等多个维度,数据与UI间的传递方式也支持单向以及双向传递,以满足应用开发的相关诉求。

ArkUI的运行机制如图所示。其中,以ArkTS语言开发的源代码,经过编译工具链和ArkUI框架API编译,形成中间代码,再通过方舟运行时形成ArkUI框架运行时。在整个渲染设计上,ArkUI提供了扁平化渲染管线、按需渲染、数据绑定以及基于PGO的AOT等创新能力,提升用户体验以及渲染效率。在跨设备的设计上,ArkUI提供了响应式组件+响应式能力的响应式布局能力以及自适应组件+自适应能力的自适应布局能力,并且在视觉交互侧也通过分层参数和主题风格、多态组件以及交互归一等进行了交互能力的增强。此外,ArkUI支持部署至百K级、M级的轻量化设备,通过引擎轻量化改造以及基于目标平台进一步轻量化定制,实现跨设备能力适配。

3.3►►ArkUI生态

衡量一个应用框架最终是否成功,关键还是要看它对应用开发者生态影响的深度和广度。下图描述了ArkUI生态构建思路概览。

如图所示,自底向上,整体生态构建分为四个维度。

  1. 框架。这层主要是框架本身的特性完备度以及竞争力,并能够满足关键应用的需求(包括关键自研应用和关键三方应用)。尤其是要通过关键垂类应用(比如电商,地图,游戏等)的突破来进一步完善框架本身。另外,当多个主流OS平台会长时间并存的情况下,跨OS平台是核心竞争力诉求。框架必须具备相应的能力来进一步提升开发效率。
  2. 工具。这层主要是配套开发工具的完备度以及三方主流开发工具的支持度。DevEco作为ArkUI的核心配套工具,需要在整体开发工作流进一步完善,同步,也需逐步推进和三方开发工具的整合,包括VSCode, 基于Chrome浏览器的调试等,进一步方便开发者。
  3. 社区。这层主要是通过相应的开源社区(开放原子开源基金会等),以及三方开源库,组件仓库等建设,以及结合主流的组件仓库NPM(Node Package Manager)等推动ArkUI的三方组件的进一步完善。
  4. 标准。这层主要是通过标准化的参与,来构建中长线影响力。包括W3C相关的标准组织(ArkUI类Web范式的进一步标准化,WebAssembly的融合探索等),ECMAScript标准组织(ArkTS的增强语言特性的进一步标准化等),软件绿色联盟(应用质量标准,原子化服务标准的完善/互通等)。

总之,ArkUI的整体生态推进策略是以关键应用为牵引,逐步夯实相应能力构建,通过工具、社区协同,并布局标准培育中长线影响力。

04未来规划

在未来的工作中,ArkUI开发框架团队将持续围绕生态和竞争力逐步演进,包括跨平台能力、分层对接能力、跨设备适配能力、渲染能力、并行化/资源调度能力等进行增强,不断提高用户体验。期待大家一起助力鸿蒙生态,持续创新,使其能够更好地赋能万物智联新场景。

点击关注了解更多OpenHarmony TSC技术干货内容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/847006.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

现代C++中的从头开始深度学习【2/8】:张量编程

一、说明 初学者文本:此文本需要入门级编程背景和对机器学习的基本了解。张量是在深度学习算法中表示数据的主要方式。它们广泛用于在算法执行期间实现输入、输出、参数和内部状态。 在这个故事中,我们将学习如何使用特征张量 API 来开发我们的C算法。具…

冠达管理:A股三大指数震荡整理 机构看好反弹趋势延续

周一,沪深两市呈弱势震动格式,创业板指领跌。到收盘,上证综指跌0.59%,报3268.83点;深证成指跌0.83%,报11145.03点;创业板指跌1%,报2240.77点。 资金面上,沪深两市昨日合计…

基于随机森林的回归分析,随机森林工具箱,随机森林的详细原理

目录 背影 摘要 随机森林的基本定义 随机森林实现的步骤 基于随机森林的回归分析 随机森林回归分析完整代码及工具箱下载链接: 随机森林分类工具箱,分类随机森林,随机森林回归工具箱,回归随机森林资源-CSDN文库 https://download.…

C++11之右值引用

C11之右值引用 传统的C语法中就有引用的语法,而C11中新增了的 右值引用(rvalue reference)语法特性,所以从现在开始我们之前学习的引用就叫做左值引用(lvalue reference)。无论左值引用还是右值引用&#…

依赖管理插件

项目场景: 接手新项目 第一步: 检查项目 看文件中包管理工具是什么 包管理工具有很多种,不要拿到就npm安装依赖 问题描述 在项目下 安装pnpm总是报错 查看了网上没找到具体解决方案 解决方案: 全局安装pnpm 全局安装pnpm npm insta…

中电金信:ChatGPT一夜爆火,知识图谱何以应战?

随着ChatGPT的爆火出圈 人工智能再次迎来发展小高潮 那么作为此前搜索领域的主流技术 知识图谱前路又将如何呢? 事实上,ChatGPT也并非“万能”,作为黑箱模型,ChatGPT很难验证生成的知识是否准确。并且ChatGPT是通过概率模型执行推…

Java基础入门篇——Java变量类型的转换和运算符(七)

目录 一、变量类型 1.1自动类型转换(隐式转换) 1.2 强制类型转换(显式转换) 1.3类型转换的其他情况 二、运算符 2.1算术运算符 2.2比较运算符 2.3逻辑运算符 2.4位运算符 三、总结 在Java中,变量类型的转换…

\vendor\github.com\godror\orahlp.go:531:19: undefined: VersionInfo

…\goAdmin\vendor\github.com\godror\orahlp.go:531:19: undefined: VersionInfo 解决办法 降了go版本(go1.18),之前是go1.19 gorm版本不能用最新的,降至(gorm.io/gorm v1.21.16)就可以 修改交插编译参数 go env -w CGO_ENABLED1…

机器学习深度学习—语言模型和数据集

👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习&&深度学习——文本预处理 📚订阅专栏:机器学习&&深度学习 希望文章对你们有所帮助 语…

订单系统就该这么设计,稳的一批~

订单功能作为电商系统的核心功能,由于它同时涉及到前台商城和后台管理系统,它的设计可谓是非常重要的。就算不是电商系统中,只要是涉及到需要交易的项目,订单功能都具有很好的参考价值,说它是通用业务功能也不为过。今…

单元测试最终结果为Stopped状态(有报错后不继续往下执行)

之前跑了一下项目的单元测试,但是发现一旦有报错后单元测试就不继续往下执行,而且最终的结果是stopped状态,截图如下: 经过排查是因为项目启动的时候有如下的代码: 通过代码可以发现如果项目启动失败,则直接…

如何用python画动漫人物,python画卡通人物代码

大家好,小编来为大家解答以下问题,python画动漫人物代码 星空,如何用python画动漫人物,现在让我们一起来看看吧! 要寒假了,给孩子画一个卡通版蜘蛛侠 完整程序代码: from turtle import * speed…

鉴源实验室|公钥基础设施(PKI)在车联网中的应用

作者 | 付海涛 上海控安可信软件创新研究院汽车网络安全组 来源 | 鉴源实验室 01 PKI与车联网 1.1 PKI概述 公钥基础设施(PKI ,Public Key Infrastructure)是一种在现代数字环境中实现认证和加密的基本框架,主要用于保护网络交互和通信的安…

新手教程:5步掌握系统流程图绘制方法!

流程图通常用于管理、分析、设计许多不同领域的流程,是一个很有用的工具,能够帮助大家更轻松、更有效地解决问题。系统流程图是流程图的常见变体之一。 系统流程图是展示数据流以及决策如何影响周围事件的图表类型。 与其他类型的流程图一样,…

【沁恒蓝牙mesh】CH58x USB功能开发记录(一)

本文主要介绍基于【沁恒蓝牙mesh】CH58x USB功能,结合SDK提供的代码包分析USB的基本常识 【沁恒蓝牙mesh】CH58x USB功能开发记录(一) 1. USB基本常识1.1 **USB 设备类别:**1.2 **USB设备实现方法:**1.3 **CDC设备&…

【我们一起60天准备考研算法面试(大全)-第三十九天 39/60】【序列型DP】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)   文章字体风格: 红色文字表示&#…

PDF Expert 3.3 for mac

PDF Expert是一款专业的PDF编辑和阅读工具。它可以帮助用户在Mac、iPad和iPhone等设备上查看、注释、编辑、填写和签署PDF文档。 以下是PDF Expert的特点: PDF编辑:PDF Expert提供了丰富的PDF编辑功能,包括添加、删除、移动、旋转、缩放、裁…

【2.2】Java微服务:Hystrix的详解与使用

目录 分布式系统面临问题 Hystrix概念 Hystrix作用 降级 什么是降级 order服务导入Hystrix依赖(简单判断原则:谁调用远程谁加) 启动类添加注解 业务方法添加注解(冒号里填回调方法名,回调方法返回兜底数据&…

DETR不需要多尺度或局部性设计

文章目录 DETR Doesn’t Need Multi-Scale or Locality Design摘要本文方法Box-to-Pixel Relative Position Bias其他改进 实验结果 DETR Doesn’t Need Multi-Scale or Locality Design 摘要 提出了一种改进的DETR检测器,使用单尺度特征映射和全局交叉注意计算&a…

RFID系统数据编码方式仿真实现

RFID 技术简介 射频识别技术(RFID,即,Radio Frequency Identification)是一种非接触自动识别技术,它利用无线通信的方式自动的从目标中读取信息。   典型的RFID射频识别系统包括标签和读写器两部分。   标签是一块集…