跨平台开发是目前开发较热门的方向,React Native 在这方面取得了很大的成功,同时 Flutter 也获得了非常多的关注。React Native 采用 Web 框架开发并使用 Native UI 进行渲染,很大程度上降低了 Native 开发的门槛并且提高迭代的效率,但是也不可避免地存在一些不足之处。
本人作为 RN 的长期开发体验者,深知在有些技术在现有的 RN 这类框架上没法得到很好的解决。比如首屏的速度,复杂的跟手动画,和原生 Android 和 iOS 上的体验确实有一定的差距的。当然这些小小的毛病不能阻碍跨平台开发技术的发展。本人也在持续的关注 Flutter,这个框架解决了RN上性能的问题,但是也增加了学习成本。
Lynx
最近发现了跨平台的一个新框架 Lynx ,从官方简介来看这个框架还处于 alpha 状态,目前还没有完整的文档,只有体验 demo 。不过在体验了这个框架提供的 demo之后,感觉还是可以持续关注下去的。Lynx 官方宣称拥有和 Native 一致的首屏速度和交互体验,体验 demo之后发现首屏速度和交互的确很优秀。
体验
正好在之前编译 RN 和 Flutter 已经下载好了 Android SDK 和 NDK ,按照 How To Build 进行编译还是比较方便的。
最终效果和官方给出的动图是一致的,就是整体的 demo 还是比较少的,略简单。页面开发流程暂时还没尝试,只能先看看效果。
在 Lynx 的介绍里面看到了和其他现有的跨平台框架相比的一些不一样的特性,根据自己的体验和官方介绍简单说一下:
- 页面首屏展示,看到给出的 demo 就可以知道,这个和原生的 Android 和 iOS 页面一样,都可以做到直出的,基本没有任何白屏的状况。这一点相比于 RN 确实是一个不错的点。
- 交互动画,就是跟手动画,在 RN 上要去实现这类动画确实是比较难(本身因为中间还要过一层 JSBridge 的原因),要么自己拓展 Native 的模块。而在 demo 上的交互动画非常顺畅,并没有出现任何的卡顿,在效果上甚至比 Flutter 帧率更高。
- JSBinding 机制,根据官方的说法有更高效的 JSBridge,但是体验上暂时没感觉出来,稍后去研究一下代码
- 动态发布测试,这个是所有跨平台框架必须有的,不算什么新鲜事。这个看文档的介绍需要结合脚手架 lynx-cli 。
页面直接展示和满帧的交互动画的实现原理是什么呢?官方给出了一个简单的工作流程图和介绍。理解了这个就基本知道这个问题的答案了,页面展示快的原因是因为将首屏的展示变成了排版文件,从而略过了 JS 的执行生成首屏元素的步骤,而交互动画的实现也是通过了中间的交互动画引擎在接收到事件后直接响应,从而略过了 JS 的中间步骤。
体验完Lynx,觉得这个框架还是值得后续观望,看下能做到什么程度。
最后
Lynx 框架现在还是在 alpha 阶段,暂时还不能直接用来开发要上线的应用,功能也尚不完备,但是可以关注它的发展,毕竟这个技术在实现上和 RN 有所区别,也希望能有新的想法,在满足先在的需求的情况下突破现有的局限。
尝试 demo 之后,准备去看看代码,一探内部实现。Lynx 的仓库也给出了可以使用的 API 列表,后续会根据 API 进行简单实践。希望能有更多的跨平台开发框架出现,推动技术的发展。
附上 Lynx 仓库地址:https://github.com/hxxft/lynx...