面向万物智联的应用框架的思考和探索(中)

news2025/1/15 17:16:58

原文:面向万物智联的应用框架的思考和探索(中),点击链接查看更多技术内容。

应用框架,是操作系统连接开发者生态,实现用户体验的关键基础设施。其中,开发效率和运行体验是永恒的诉求,业界也在持续不断的发展和演进。

本文重点围绕移动应用框架,梳理其关键发展脉络,并分析其背后的技术演进思路以及目前的局限;同时,进一步结合万物智联的新场景和新生态,围绕相应的应用框架的设计和演进,分享个人在这个领域的思考,实践,以及下一步探索。

“预见未来的最好方式,就是创造未来”– 亚伯拉罕 · 林肯

1、面向万物智联的应用框架的架构设计思考

1.1 万物智联下的新场景,新需求

随着越来越多设备的智能化,新的场景以及新的需求也逐步呈现,主要包括:

a.更多的不同形态的设备支持。包括各类屏幕(不同分辨率,尺寸,纵横比,折叠屏的折叠/展开切换,“刘海屏”等),以及各种交互模式(触控、键盘、鼠标、遥控器,表冠,语音,3D手势等)。

b.更多的不同能力的设备支持。包括各种芯片规格,各种RAM(Random Access Memo-ry)/ROM(Read Only Memory)规格(百KB级别,MB级别到GB级别),各种系统能力规格等。

c.设备之间的交互。包括应用在设备之间流转,协同等。

除此之外,对应用开发者而言,还有两类非常重要的需求:

Ⅰ、跨OS(Operating System)平台能力

由于事实上多个主流OS的存在,如何有效的提升可同时支持不同OS(比如iOS和Android等)的应用开发效率是个重要的需求。目前开发者主要还是依赖三方跨平台框架。有些应用开发者在某些场景下,因为原生框架所带来的效果体验不一致带来较大的适配成本,甚至在一些关键模块不使用原生应用框架的能力,而是重新设计一套具备跨平台一致性的方案。

Ⅱ、动态化内容部署能力

如何将业务的内容在不违反相关规则的情况下迅速部署到客户端,以便业务快速触达客户,也是大多数应用比较通用的需求。目前主要是应用开发者通过设计相关框架能力来支撑,不用应用采用方案各不相同。

这些对应用框架的设计都提出了新的要求,包括自适应能力、模块化能力,分布式能力,跨平台能力,动态内容更新能力等。当然,有些场景需要OS底层本身也要做相应的演进,比如可部署到更轻量的设备,分布式基础设施构建等。

1.2 目前应用框架的局限:

纵观现有的各类方案,在新兴的场景和应用需求下,逐渐呈现出一定的局限性。

1.2.1 原生应用框架

先说Apple。以Apple的iOS上的应用框架为例,它在面向开发者的简洁高效,面向消费者的自然流畅,语言、框架、工具的以及软硬件的紧密结合,生态的管控等方面都是第一流的。Apple的生态是自闭环的,也是有明确边界的,这样的策略在Apple生态是一家独大时问题不大,但当事实上是多个主流OS生态并存,尤其随着万物智联的生态进一步扩展时,Apple的方式呈现出了一定的局限性:

1)Apple的应用框架仅限于自身OS系列,比如SwiftUI只会关注iOS, iPadOS,macOS等,并没有考虑如何在其它OS上实现一定的复用能力。

另外,对应用常见的应用内容动态更新的需求,Apple则是严格的限制,并没有在框架层面考虑怎么在一个合适范围内提供一定的支持。

2)Apple的应用框架对系统设备有较高的要求,无法支撑轻量化的智能设备(比如M级内存的设备等)。当然,这个也和Apple目前自身的定位相关。

再说Google。以Android为例,目前主推的Kotlin和以及Jetpack Compose基本是Google为了逐步摆脱Java,并对标Apple的Swift以及SwiftUI而研发的产物。Google的整体策略相对开放,在架构上, Jetpack Compose做了分层解耦的设计,提供不同层次的API的开发能力供开发者灵活接入。另外,在跨OS平台维度,Jetpack Compose也做了一定的考虑,除了Android之外,通过JetBrains的推进, 也可支持PC平台(Windows/macOS)等。不过,目前Jetpack Compose在成熟度,以及多设备以及相关配套工具层面能力和Apple的SwfitUI相比还有不少差距。另外,前面所说的轻量化设备的支持,以及动态化内容更新的能力,也未涉及。

1.2.2 三方跨平台应用框架

三方跨平台框架也在不断演进。下图总结了典型的三方框架的关键特征:

Figure 1 对比原生框架,典型三方跨平台框架的关键特征

另外,从语言角度,尽管JS/TS具备较强的生态能力,业界也在不断的演进相应的引擎、工具链,但从对标原生语言的性能体验维度,还是有关键的不足,如下图所示:

Figure 2 对比原生语言, JS/TS的现状以及不足

上图简要描述了JS/TS从编译到运行的大致过程。尽管业界在JS引擎方面持续在做优化提升,比如注重高性能JIT能力的Google的V8以及Apple的JavaScriptCore, 注重轻量化、高效解析能力的Facebook的Hermes, 个人开发者Fabrice Bellard的QuickJS等,但如果要对标原生语言的运行体验,还有几个重点的维度有待进一步突破:

1)结合类型信息的优化,和更精细化类型的引入;

2)结合PGO(Profiling Guide Optimiza-tion)的AOT能力;

3)更高效的并行化机制等。

1.3 如何设计应用框架,实现系统性跨越

如上所述,现有的原生应用框架以及三方跨平台框架都有自身定位/设计上的局限。那在万物智联的场景下,应该如何设计应用框架,才能较好的满足相关要求,并实现系统性跨越?

让我们先回归本源,审视一下应用框架要解决的核心问题。按递进关系,个人总结了三个维度的关键需求,如下所示:

Figure 3 应用框架要解决的核心问题

对同一OS平台而言,应用框架要解决的核心问题主要有三类:1.开发效率;2.性能体验;3.跨设备能力。

而当事实上有多个主流OS平台长期并存时,跨平台的需求,或者更准确的说,如何进一步降低主流平台上应用适配的成本,就变的非常重要。它包括不同平台上的开发效率,性能体验,以及SDK包大小等要素。

除此之外,随着业务演进,动态化内容更新机制也演变为了非常关键的需求。

要构建可对标主流操作系统(e.g. iOS,Android)原生应用框架,并能够在面向万物智联的场景实现进一步跨越的新一代应用框架,个人认为,至少需围绕以下几个方面进行系统性的布局和设计:语言生态以及性能体验;声明式开发框架能力;跨设备自适应以及弹性部署能力;跨平台能力。

1.2.3.1 语言生态以及性能体验

iOS平台的Swift以及Android平台的Kotlin已经各自形成了相应的平台的主导语言,并有相应的公司来主导。对于新的OS平台而言,创造全新的语言是一种方式,不过语言以及相关生态的发展需要比较长的周期(从正式发布到一定规模的应用一般至少需要5年以上的时间)。还有另外一种方式,则是选取现有的相对中立的并有广泛应用基础的语言,并在此基础上演进。JS/TS即是这样的语言,它应用生态广泛,也有相应的业界标准-ECMAScript来持续演进。

以下图片来源于RedMonk官网:

https://redmonk.com/rstephens/2022/03/28/top-20-jan-2022/)

它显示了2012-2022这十年来的编程语言的热度排名情况(综合考虑Github热度以及StackOverflow热度)。如下所示,JS/TS语言持续领先。

 Figure 4 编程语言排行榜 - RedMonk

如之前分析,要让JS/TS具备可对标主流平台原生语言的性能以及开发体验,需要在语言、编译器以及运行时实现关键的跨越:

1)基于类型信息的编译以及运行时优化

2)AOT能力,并可根据关键执行路径信息的反馈实现进一步优化

3)高效的并行化机制

4)声明式语法扩展,实现简洁自然的开发体验

以这些为基础,配合相应的优化的语言标准库,更细粒度的类型扩展,比如64位/128位等数值类型进一步结合硬件实现SIMD(Single Instruction Multiple Data)的加速等,就具备了能达成高效的语言执行性能的关键能力。另外,在高效开发方面,除了语言层面的声明式语法扩展,还可以进一步针对分布式场景对数据类型做相应扩展,提升跨设备场景下应用开发体验。

1.2.3.2 声明式开发框架

声明式开发框架的核心就是以简洁自然的方式来描述UI,并通过数据的变化来驱动UI的自动变更。

从UI描述维度,它的关键组成如下(简洁自然是关键需求):

a. 一套UI描述机制,包括基础结构语法,基础布局/组件/动效/事件处理/生命周期,以及组件化机制实现UI的积木式组合等

b.一套状态管理描述机制,包括数据和UI的关联,数据的共享和传递机制等

c.一套自定义扩展以及定制化机制,包括可自定义布局/绘制/动效,可对现有组件根据需要做定制/动态扩展等

从运行时维度,它的关键要素如下(性能体验是关键需求):

a.高效的UI渲染管线,并可实现组件/属性按需组合降低内存开销

b.高效的状态管理/UI更新机制,根据数据变化精准定位刷新范围

c.自适应UI能力,以及多态组件能力(同一UI描述在不同设备可自动实现不同UI效果,自动适配不同的用户交互模式等)

d.平台无关的一致性渲染能力

另外,在配套的工具层面,比如IDE,需具备实时预览能力(包括双向预览,多设备预览,预览和调试融合等)。

1.2.3.3 跨设备自适应以及弹性部署能力

这里主要包括针对不同形态的设备的自适应(包括布局,控件形态等),不同能力的设备弹性部署(包括设备的提供API差异,系统所需的资源差异等)。从架构设计而言,则需具备组件解耦,按需加载,以及轻量化等能力。

1.2.3.4 跨平台

这里主要包括平台抽象层设计以及各个主流OS相应的适配实现,相关的工具链支持等。这样就可以基于一套主代码,部署到不同的OS平台上。其中的关键要素包括通用的API设计和实现(提升应用代码的复用度),组件化机制(降低SDK大小),以及上述提到的平台一致化渲染能力等。

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

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

相关文章

【路径规划】基于麻雀搜索算法的栅格法路径规划 机器人路径规划【Matlab代码#21】

文章目录 1. 原始SSA算法2. 机器人路径规划环境创建3. 路径规划模型建立4. 部分代码展示5. 仿真结果展示6. 资源获取方式 1. 原始SSA算法 2. 机器人路径规划环境创建 对机器人工作空间的进行环境建模是机器人路径规划研究的重要前提。栅格法为环境建模提供了一种简洁有效的方法…

法规标准-GB/T 33577标准解读(2017版)

GB/T 33577是做什么的? GB/T 33577全名为智能交通系统-前方车辆碰撞预警系统(FVCWS)-性能要求和测试步骤,其中主要是对FVCWS系统的功能要求、性能要求及测试步骤进行了介绍。由于ISO 15623-2013内容与本法规内容相同,故可沿用此法规内容 FV…

【谷粒商城之消息队列RabbitMQ】

本笔记内容为尚硅谷谷粒商城消息队列RabbitMQ部分 目录 一、概述 二、简介 三、Docker安装RabbitMQ 四、Springboot整合RabbitMQ 1、引入spring-boot-starter-amqp 2、application.yml配置 3、测试RabbitMQ 1. AmqpAdmin-管理组件 2.RabbitTemplate-消息发送处理组件…

Wikidata实操

1. Wikidata 简介 Wikidata 即维基数据,是维基百科的一个项目。个项目已经在维基百科德国分部开始进行,项目完成之后,将会交给维基百科基金会进行操作和维护。(具体百度即可,不多赘述) 官网:htt…

操作系统考试复习—第三章 优先级倒置 死锁问题

当前OS广泛采用优先级调度算法和抢占方式,然而在系统中存在着影响进程运行的资源从而可能产生"优先级倒置"现象 具体解释为:在原本的调度算法设计中,高优先级进程可以抢占低优先级的CPU资源,先执行高优先级任务。但是存…

【STM32】在使用STM32Cube.IDE时更改时钟频率后代码跳进异常中断

目录 1、前言2、问题与复现办法3、解决的问题的过程 1、前言 这是在项目中无意发现的问题,其实有同样更复杂的工程可以运行,但是后来发现新建一个简单工程反而运行不了了,但是同样更复杂的工程可以运行说明本来同事原来已经不知道在哪里找到…

Vmware安装Kali

需要准备两个东西,kali镜像和VMware软件 下载kali iso 下载界面有三个可选择的 install是安装版,安装使用; Live版可以直接启动运行; netinstaller是网络安装,需要从网络上下载,文件本身只有引导作用&…

Idea Jrebel 报错:Cannot reactivate, offline seat in use ...

Idea Jrebel 报错:Cannot reactivate, offline seat in use ... 一、问题描述 在使用idea Jrebel续期的时候,修改idea激活服务器地址时,遇到报错:Cannot reactivate, offline seat in use. Click Work online in JRebel configura…

基于aspnet个人博客网站dzkf6606程序

系统使用Visual studio.net2010作为系统开发环境,并采用ASP.NET技术,使用C#语言,以SQL Server为后台数据库。 1.系统登录:系统登录是用户访问系统的路口,设计了系统登录界面,包括用户名、密码和…

探索卡尔曼滤波在位姿估计中的魅力:无人机与自动驾驶的关键技术揭秘

摘要:在本博客中,我们将探讨卡尔曼滤波在位姿估计领域的应用,特别是在无人机和自动驾驶场景中的重要性。我们将详细介绍卡尔曼滤波的原理、优势及其在无人机、自动驾驶等实际案例中的应用。此外,我们还将关注卡尔曼滤波在其他领域…

【服务器数据恢复】同友存储上的虚拟机数据恢复案例

服务器数据恢复环境: 同友存储,底层由数块物理硬盘组建的raid5磁盘阵列,存储池划分若干lun,每个lun下有数台虚拟机。 服务器故障: 未知原因导致存储崩溃,无法启动,虚拟机全部丢失,其…

linux中基础开发工具的使用

1.linux中的软件包管理器 1.1什么是软件包 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序.但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很…

软件管理员密码的作用 如何设置软件管理员密码?

在使用夏冰加密软件的过程中,很多软件都是可以设置软件管理员密码的。那么你知道管理员密码有什么用吗?又该如何设置软件管理员密码呢?下面我们来了解一下吧。 软件管理员密码是什么意思? 软件管理员密码就是软件的密码&#xff…

毕业5年,技术越来越好,混的却越来越差...

别人都是越来越好,而我是越来越差! 17年,从一个普通的本科毕业,那个时候的我,很迷茫,简历上的求职岗位都不知道写什么,因为家里是农村的,朴实的父母也帮不上什么忙,关于…

KDBR-IV变压器空负载短路损耗测试仪

一、产品概述 本产品是我公司针对不良电力用户偷逃基本电费、私自增容问题而研发设计的仪器,用于变压器容量、空载、负载等特性参数测量的高精密仪器。本仪器为多功能测量仪器,相当于往常两种测试仪器:即变压器容量测试仪变压器特性参数测试仪…

【因子挖掘】遗传规划概述

在多因子选股的框架下,因子的产生通常有两条途径: 先有逻辑,后有公式:根据经济学逻辑、历史经验、直觉进行人工构造一些因子; 例如:动量(Momentum)因子:当最近的股价呈现…

Cadence Allegro 布局操作Move命令的应用

在布局的时候,常常需要对一些元素去进行移动位置以方便进行设计。 1、执行菜单命令Edit-Move,此时PCB界面的左下角会显示Move,就表示正在执行移动命令,如图1所示。 图1 移动命令 2、在PCB界面右边的Find面板中所选择需要进行移动…

Charles抓包工具使用

一、Charles的安装与激活 安装 官方地址:https://www.charlesproxy.com/ 根据自己系统安装最新版本即可 安装后可直接打开使用 激活 打开Charles -> 【Help】 -> 【Register Charles】 -> 输入 Registered Name : https://zhile.io Lic…

智能座舱的“宏大蓝图”和“残酷现实”

配图来自Canva可画 2023年上海车展各大车企发布新车、新配置和新战略好不热闹,“智能驾驶”、“智能座舱”等关键词频频出现,智能化已然成为车企技术比拼的关键。 Unity中国发布最新智能座舱解决方案,可为车企提供成熟、可量产落地的HMI&…

学系统集成项目管理工程师(中项)系列17b_范围管理(下)

1. 创建工作分解结构WBS 1.1. 自上而下的分解结构 1.2. 把项目可交付成果和项目工作分解成较小的、更易于管理的组件的过程 1.3. 用来确定项目范围的 1.3.1. 包括分包出去的工作 1.3.1.1. 【21上选40】 1.4. 输入 1.4.1. 项目范围管理计划 1.4.2. 项目范围说明书 1.4.…