只要写一遍,
哪里都能跑;
不仅写的快,
而且性能好;
生态能复用,
上线Bug少。
前端: .kt 源码 →[解析器]→AST→[语义分析器]→ FIR
后端: 输入 FIR
跨端代码(Shared module)+壳工程(Android/iOS App)
Native Widget
React Native / Hippy / Weex基于 Flutter 的自绘框架
WebF,Kraken,Kun,Skyline基于 Skia / OpenGL 的自绘框架
TDF,Hippy 3.0,Weex 2.0,MagicBrash,Waft特点:
Dart 层实现 CSS,C++ 层实现 WebAPI,对标 W3C 标准。
内联样式的开发体验不好,且信息密度太高
复杂度太高,每个样式规则的计算都需要一层一层检查推断,导致维护效率下降。
Diff 的复杂度也会大幅下降。
WeexAbility:容器和能力扩展,URL 拦截、缓存、基础 API、三方扩展等。
WeexFramework:通用基础框架。封装页面实例,实现 DOM、CSSOM、WebAPI 标准,解耦脚本引擎和渲染引擎。
QKing:脚本引擎,基于 QuickJS 的魔改。
Unicorn:自绘渲染引擎。实现 CSS 能力,包括完整的节点构建、动画、手势、布局、绘制、合成、光栅化渲染管线,可跨平台。
WeexUIKit:原生 UI 渲染引擎,封装了原生组件。
涉密,已屏蔽
涉密,已屏蔽
选型用例存疑:
fib(40) | 安卓(1+5t) | iOS(iPhone11) |
---|---|---|
js | 4000ms | 13000ms |
wasm | 2048ms | 4224ms |
Native | 963ms | 395ms |
涉密可以进一步优化 wasm 性能。
W3C 标准(DOM Elememt、WebAPI)实现欠缺
核心:在 Runtime 期间加载可执行代码,并调用。
Desktop 的优势:
Desktop 的不足:
方案1: 使用 JSExport 和 JSExportAS
方案2: 使用 C Export 将方法和属性用 JSStaticFunction 和 JSStaticValue 进行绑定
耗时(ms/百万次) | |
---|---|
JSExport | 1278 |
C Export | 452 |
优点:
缺点:iOS 无法开启 JIT
JIT 的问题:
OpenGL / Vulkun / Metal
一种可以让 JavaScript Runtime 进行中断,并可以实时查看内部运行状态的应用。
涉密,已屏蔽
研发模式
只要写一遍,
哪里都能跑;
不仅写的快,
而且性能好;
生态能复用,
上线Bug少。
Diff 的复杂度也会大幅下降。
WeexAbility:容器和能力扩展,URL 拦截、缓存、基础 API、三方扩展等。
WeexFramework:通用基础框架。封装页面实例,实现 DOM、CSSOM、WebAPI 标准,解耦脚本引擎和渲染引擎。
QKing:脚本引擎,基于 QuickJS 的魔改。
Unicorn:自绘渲染引擎。实现 CSS 能力,包括完整的节点构建、动画、手势、布局、绘制、合成、光栅化渲染管线,可跨平台。
WeexUIKit:原生 UI 渲染引擎,封装了原生组件。