近日,京东正式开源了Taro on HarmonyOS C-API 版本,为鸿蒙应用跨端开发提供高性能框架。这次版本的发布,带来了更丰富的样式适配、更高效的渲染性能、更全面的组件支持,让开发者以Web范式的方式来开发出媲美鸿蒙性能的应用,为鸿蒙应用生态的丰富注入强大的动力。

图:京东鸿蒙版应用

整体技术架构

Taro on HarmonyOS 技术方案支持开发者使用 React DSL 来开发鸿蒙应用,在整体架构上可以简单分为三层:

图:Taro on HarmonyOS React

最上层是应用业务代码所在的 ArkVM 层,这一层在 C-API 版本中主要运行业务代码、React 的核心代码以及少量的 Taro 运行时代码。

中间层是 Taro 的 CSSOM 和 TaroElement 树,负责处理上层 Taro 运行时代码传递下来的指令,比如 TaroElement 节点树创建,绑定关系以及设置属性等操作。

最下层存放的是 TaroRenderNode 虚拟节点树,这棵节点树和真正的上屏节点树是一一对应的关系,同时在 TaroRenderNode 节点树内会创建对应的 Yoga 节点。

图:Taro on HarmonyOS React DOM

同时,Taro还基于鸿蒙提供的VSync机制设置一套任务处理管线,来处理中间层和下层节点树产生的样式匹配、节点测量、节点布局、样式设置以及节点上屏等任务,来保证任务的时序性和最后上屏渲染结果的正确性。

重点特性

在特性方面,Taro on HarmonyOS 技术方案具备“丰富的能力支持、媲美 ArkTS 的高性能、支持 C-API 渲染模式”等三大重点特性。

(1) 丰富的能力支持

C-API 版本的 Taro on HarmonyOS支持常用组件和 API ,不仅支持React 18+,还支持View、Text、Image、Video 等近33个Taro组件,以及支持如getSystemInfo、getStorage 等常用的API,针对逻辑较为复杂的 API 如:createSelectorQuery 以及 createIntersectionObserver,也在C++侧进行了重新的实现,大幅提升了执行性能。

此外C-API 版本支持大部分常见的 CSS 能力:

支持常见的 CSS 样式和布局,支持 flex、伪类和伪元素

支持常见的 CSS 定位,绝对定位、fixed 定位

支持常见的 CSS 选择器和媒体查询

支持常见的 CSS 单位,比如 vh、vw 以及计算属性 calc

支持 CSS 变量以及安全区域等预定义变量

同时,在参考浏览器 CSSOM 的实现方式基础上,在C++实现了一套 CSSOM 逻辑,里面包含了样式解析、样式匹配、样式合成和应用整个链路的样式处理逻辑。

图:Taro on HarmonyOS CSS

另外,Taro 引入了 Yoga 布局引擎来计算渲染节点的位置和大小,最大程度保证 Taro 构建出来的鸿蒙应用中渲染样式和 W3C 规范的一致性。

图:Taro on HarmonyOS Style

(2) 媲美 ArkTS 的高性能

在 C-API 的版本中,ArkVM 层的 Taro 运行时内容已削减到非常薄,将 TaroElement 的大部分内容都下沉到了 C++ 侧,并在 ArkVM 层取消了他们之间父子关系的绑定,极大地提升了 TaroElement 相关逻辑的性能。

图:Taro on HarmonyOS CAPI

另一方面,在 C++ 侧 Taro 会指令式地调用 ArkUI 在 C++ 侧提供的 API,来高效地创建节点、设置属性、绑定事件以及绘制上屏。

Taro 还针对长列表场景针对性地提供了长列表类型组件,并对长列表类型组件进行了优化,提供了懒加载、预加载和节点复用等功能,有效地解决大数据量下的性能问题,提高应用的流畅度和用户体验。

图:Taro on HarmonyOS Virtual List

(3) 支持 C-API 的渲染模式

Taro 的组件和 API 是以小程序作为基准来进行设计的,因此在实际的鸿蒙应用开发过程中,会出现部分所需的组件和 API 在 Taro 中不存在的情况,因为针对这种情况,在 C-API 版本中,Taro 支持将初始页面或者组件混合编译到 Taro 鸿蒙项目中,支持 Taro 组件和鸿蒙组件在页面上的混合使用。

图:Taro on HarmonyOS CAPI Hybrid

使用指南

Taro on HarmonyOS技术方案已开源至Github,开发者可搜索“taro”以获取更多信息:

使用前,开发者可先安装Harmony插件

添加插件配置

编译项目

如果需要编译鸿蒙应用,同时使用编译鸿蒙组件,可以在页面配置中添加 entryOption: false 表示该页面是组件,同时可以用过 componentName 指定组件导出名。

Taro on HarmonyOS C-API 版本经历了京东鸿蒙 APP 的实践,从综合性能、生态以及开发体验都更上一层楼。未来,京东团队还会基于当前的 Taro on HarmonyOS C-API 方案,进行多线程的架构升级以及 React 的 C++ 化,进一步提升 Taro 在鸿蒙端侧的性能,并极大地降低应用的丢帧率。欢迎广大开发者一起参与 Taro on HarmonyOS 的共建,推动 Taro 更好发展。

华为在未来也将持续携手生态伙伴共建创新,面向底座技术、通用能力、垂类行业等场景推出系列开发者场景化解决方案,不断提升鸿蒙应用的创新体验和开发效率,与广大开发者共建繁荣的鸿蒙生态。

京东正式开源Taro on HarmonyOS C-API 版本,为鸿蒙应用跨端开发提供高性能框架的更多相关文章

  1. WeX5开源免费跨端开发工具-html5 app开发就用WeX5

    http://www.wex5.com/wex5/?utm_source=Baidu-0815

  2. 微博轻量级RPC框架Motan正式开源:支撑千亿调用

    支撑微博千亿调用的轻量级 RPC 框架 Motan 正式开源了,项目地址为https://github.com/weibocom/motan. 微博轻量级RPC框架Motan正式开源 Motan 是微 ...

  3. Netflix正式开源其API网关Zuul 2

    5 月 21 日,Netflix 在其官方博客上宣布正式开源微服务网关组件 Zuul 2.Netflix 公司是微服务界的楷模,他们有大规模生产级微服务的成功应用案例,也开源了相当多的微服务组件(详见 ...

  4. Netflix正式开源其API网关Zuul 2--转

    微信公众号:聊聊架构 5 月 21 日,Netflix 在其官方博客上宣布正式开源微服务网关组件 Zuul 2.Netflix 公司是微服务界的楷模,他们有大规模生产级微服务的成功应用案例,也开源了相 ...

  5. Taro 3 正式版发布:开放式跨端跨框架解决方案

    作者:凹凸曼 - yuche 从 Taro 第一个版本发布到现在,Taro 已经接受了来自于开源社区两年多的考验.今天我们很高兴地在党的生日发布 Taro 3(Taro Next)正式版,希望 Tar ...

  6. 如约而至:微信自用的移动端IM网络层跨平台组件库Mars已正式开源

    1.前言 关于微信内部正在使用的网络层封装库Mars开源的消息,1个多月前就已满天飞(参见<微信Mars:微信内部正在使用的网络层封装库,即将开源>),不过微信团队没有失约,微信Mars ...

  7. 【转】如约而至:微信自用的移动端IM网络层跨平台组件库Mars已正式开源

    网上看到关于微信官方的跨平台跨业务的终端基础组件Mars的介绍文章,转载这这里.源代码: https://github.com/Tencent/mars作者:男人链接:https://zhuanlan ...

  8. Restful.Data v1.0 - 轻量级数据持久层组件, 正式开源发布了

    经过几个星期的优化调整,今天 Restful.Data 正式开源发布. 源码地址:https://github.com/linli8/Restful 今天不写那么多废话了,还是重新介绍一下 Restf ...

  9. 中文编程语言Z语言开源正式开源!!!

    (Z语言基于.NET环境,源码中有很多高技术的代码,让更多的人知道对大家有会有很好的帮助,请管理员一点要批准放在首页) 本人实现的中文编程语言Z语言现在正式开源,采用LGPL协议. 编译器核心的网址为 ...

  10. fir.im Log Guru 正式开源,快速找到 iOS 应用无法安装的原因

    很开心的宣布 Log Guru 正式开源! Log Guru,是 fir.im 开发团队创造的小轮子,用在 Mac 电脑上的日志获取,Github 地址:FIRHQ/LogGuru. Log Guru ...

随机推荐

  1. Docker管理面板系列——Portainer

    一.介绍 Portainer是个轻量级的Docker管理面板,和Rancher这种重量级选手没法比,Portainer倾向于单机的管理(后来发现能够添加多个单机节点切换着管理),当然,在Docker搞 ...

  2. 关于项目中 "不能创建大小为 8190 的行,该大小大于所允许的最大行大小 8060 "的处理

    由于产品底层设计的情况,sqlserver  列设置了 可以随用户 创建自动生成 项目特殊,设置的列过多,有三四百列(通常不会过多) 数据无法正常保存,报错"不能创建大小为 8190 的行, ...

  3. 流式计算(四)-Flink Stream API 篇二

    个人原创文章,禁止任何形式转载,否则追究法律责任! 本文只发表在"公众号"和"博客园",其他均属复制粘贴!如果觉得排版不清晰,请查看公众号文章. 话说看图看核心 ...

  4. PostgreSQL 密码忘了

    许久不登, 倒是把默认的 postgres 用户的密码给忘了... 首先关闭 PostgreSQL. 我这是 Windows 上安装的, 所以到服务 (services.msc) 里关闭. 然后修改配 ...

  5. P5490 【模板】扫描线 & 矩形面积并 做题笔记

    扫描线是一种很常用的 trick,用来计算矩形并周长.并面积.核心思路是使用标记永久化 + 线段树,直接引用朴素的做法,即从某一维度开始扫描并将经过的面积加和. 错误 upd 函数中的汇总不正确,要想 ...

  6. DAY1--ROS基本认知

    1.ROS基本框架 ROS架构如下图所示,可以将其分为三个层次:OS层.中间层和应用层. 1.1 应用层 应用层是用户直接交互的部分,包含以下核心组件: Master: ROS的核心协调者,负责节点( ...

  7. MySQL 中 int(11) 的 11 表示什么?

    MySQL 中 int(11) 的 11 表示什么? 在 MySQL 中,int(11) 中的 11 并不表示整数的取值范围,而是用于显示宽度(Display Width).它的含义和具体影响如下: ...

  8. 使用 Go 构建一个最小的 API 应用

    最近有项目要使用 Go 开发,作为一个. NET Core 选手,准备先撸一个包含 CRUD 的最小 MVP 项目练手. 要创建一个 TODO 应用,会创建下面这些接口: API Descriptio ...

  9. SpringBoot内容协商(Content Negotiation)

    内容协商 在 HTTP 协议中,内容协商是一种机制,用于为同一 URI 提供资源不同的表示形式,以帮助用户代理指定最适合用户的表示形式(例如,哪种文档语言.哪种图片格式或者哪种内容编码).[^1] S ...

  10. 【HUST】攻防实践|中间人攻击netcat通信过程

    更新(略微整理了一下行文逻辑的版本):[HUST]网络攻防实践|TCP会话劫持+序列号攻击netcat对话_shandianchengzi的博客-CSDN博客_tcp序列号攻击是如何实现的. 旧版博客 ...