轻量开发、原生性能:RTS 一码多端新范式
如果无法正常显示,请先停止浏览器的去广告插件。
1. 轻量开发、原生性能:RTS 一码多端新范式
主讲人:郝有峰
蚂蚁终端体验科技大会
2. 2019:设计小程序前端框架、Bridge
2022:基于 WASM 的区块链合约引擎
关于我
郝有峰 @ajihyf
字节跳动 - Cross Platform
Languag
UI
2023:自渲染引擎,自渲染端渲染混合排版
Graphics
2024:RTS 一码多端,Relax UI 框架
3. /01 Why RTS 一码多端
/02 如何 RTS 一码多端
/03 性能与落地收益
4. /01 Why RTS 一码多端
我们还需要跨端框架吗?
需要什么样的跨端框架?
5. 鸿蒙适配降本增效Vibe Coding
进一步提升多端对齐复杂度业务对客户端人效比有更高诉求bolt.new、Replit
均选用跨端框架生成客户端应用
跨端是减少复杂度、提高人效的有效手段
6. React NativeFlutterCompose Multiplatform
• 基于 JavaScript 运行时• 基于 Dart AOT• Android 基于 JVM,采用端渲染,可
• 采用端渲染• 采用自渲染• 基于 JavaScript Interface Bridge 与
端通讯• 使用 DartFFI / MessageChannel 与
端通讯
与端无缝通讯
• iOS / 鸿蒙基于 Kotlin Native AOT,
采用自渲染,通过 OC / NAPI 桥接与
端通讯需
7. 跨端语
跨语言调用:FFI 与 GC
运
时
宿主语
运
数据结构数据结构
垃圾回收垃圾回收
时
• 跨端语言与宿主语言难以传递复杂容器数
据结构
• 数据传输存在序列化、反序列化或拷贝
• 不同堆对象之间互相持有,内存结构复杂
操作类型Kotlin -> OCSwift -> OC
空函数调用8862 ns/100op380 ns/100op
简单计算操作6859 ns/100op378 ns/100op
返回值处理4914 ns/100op378 ns/100op
8. 应用进程
LayerTree
渲染体系
Draw
• 跨端语言+端渲染:大量 FFI
• 跨端语言+自渲染
GPU 进程
Draw
• 每个Surface W*H*4(*缓冲数) 内存占用
• 无法与系统共享字体、Shader 缓存,
CompositiCompositi
自渲染/安卓端渲染iOS、鸿蒙端渲染
影响冷启速度
• 独立合成,动画受UI线程制约,无法利
用iOS、鸿蒙的合成器动画
9. RTS 语言
支持转译为为 Kotlin、Swift、ArkTS、JavaScript,无 FFI 高性能调用。
同时支持编译为字节码动态下发。
基于转译的新思路
Salamander 工程化
脚手架、开发、Typing、IDE工具链。
围绕语言、UI 框架、工程化体系,
我们打造了 RTS 一码多端方案。
Relax UI 框架
Signal 响应式 + JSX 语法,无 Di 点对点更新。
基于 Lynx 提供多平台一致的端渲染能力。
10. /02 如何 RTS 一码多端
如何同时拥有极致性能与开发体验
11. RTS:无缝转译
12. RTS 转译示例
kotlin
Swift
13. RTS 核心语法能力
客户端能力RTS 能力
函数重载,泛型,闭包
class/重载,覆盖,泛型,抽象类
协程Promise, async/await
多线程SLThread
类型转换as, as?, as!
数据类型Json, 元组
序列化Serializable
容器类型Array, Map, Set…
14. 基础类型映射
RTS 类型Kotlin 类型Swift 类型ArkTS 类型TypeScript 类
型
int32IntInt32numbernumber
int64LongInt64bigintbigint
oat32FloatFloatnumbernumber
oat64DoubleFloat64numbernumber
ArrayKotlin.ArrayListNSMutableArrayArrayArray
MapMap
SetSet
Map
Set
NSMutableDictionar
Kotlin.MutableMap
y
MutableSet
NSMutableSet
15. Kotlin / ArkTS / JavaScript
基于 GC,内存管理模型一致。
Swift
RTS 内存管理
基于 ARC 引用计数。
提供 weak 关键字,由开发者解除循环引用。
RTS
Swift
16. Salamander:一站式工具链
17. Swift
宿主接口调用
typing
s
RTS 可消费的 d.ts
18. sl dev
Swift
DTS 类型声明
Kotlin
生成 typings
ArkTS
客户端已有代码
Import typings
客户端产物
静态编译
Swift
转译
RTS 工程
Kotlin
ArkTS
编译
调试、动态发布
VM ByteCode
19. RelaxUI:极致轻、薄
20. 声明式开发范式
借鉴 React 语法,JSX 编译为指令式操作,逼近手写
CURD 代码性能。
基于 Modi er 的样式描述,无 CSS resolve 负担。
21. 编译渲染链路
Relax Compiler
RTS Compiler
Calls
view
Android View
Render
Style
Use
iOS UIKittext
Layout
Harmony CAPIImageEvent
客户端渲染LynxUIRelaxFramework
22. E ect 树代替组件树
render 永远只执行一次。
无组件、rerender 等概念,唯一的
运行时就是响应式图。
23. 高性能响应式算法
采用最先进的响应式算法,将节点之间的关系串联为链
表。
重计算时,无容器操作,无新增对象。
极大减少 GC 压力。
js-reactivity-benchmark 中超过 Solidjs 30%+。
24. RTS 管线,C++布局引擎
与端交互无 FFI。
采用 Lynx 高性能 C++ 布局引擎,与布局系统
采用紧凑数值编码 bu er 交互。
25. 端渲染+ atten
基于端渲染,在 iOS、鸿蒙上与端组件无缝混排。
Android 上还额外支持 atten 能力,能将多个层级的视
图扁平化到一个 view 中。
26. 开发体验
27. One IDE
• 语法提示
• 在 RTS 中断点调试 Native 应用
28. Hot Reload 开发
• 开发阶段编译为字节码,秒级重载页面
29. 总结
30. • 无跨语言调用的 FFI、GC 问题。
极致性能
• 无缝使用客户端生态。
• 轻量、集成成本低。
• UI 框架无 Di ,接近指令式操作性能。
31. 业务迭代期
字节码动态发布模式,快速迭代。
动静兼顾的跨端形态
业务稳定期
静态编译模式,原生性能。
32. /03 性能与落地收益
性能收益与人效收益
让跨端成为客户端基建本身
33. Hello World(FMP)
52.5
SwiftUI
Relax
Native
SwiftUI
Native
Relax
35
iOS
17.5
0
低端机
端机
Compose
50
37.5
Relax
25
Native
Native
Compose
12.5
0
低端机
端机
Relax
Android
34. 大量色块
5250
3500
iOS
SwiftUI
1750
Relax
Native
0
Native
低端机
Relax
端机
Compose
1600
1200
800
Native
400
0
Android
Relax
Native
低端机
Compose
端机
Relax
35. 长列表
SwiftUI
Relax
127.5
Native
Relax
Native
85
iOS
42.5
0
低端机
端机
Compose
300
Relax
225
Compose
Native
150
Relax
Native
75
0
低端机
端机
Android
36. 落地业务
客户端业务:抖音、头条、即梦、巨量引擎等
平均同构率70%,人效提升40%。
37. 跨端到客户端基建
• 新的跨端落地场景:基于 RTS 的多端一致性容器。
• 达到三端同构率约60%,提升人效31%。
38. Thanks