建一个app平台的费用 移动app开发平台架构( 三 )


在 weex 项目的f.js 中可以看到,其实打包也是区分了 webConfig 和 weexConfig 的不同打包方式 。如下图,其中weexEntry 就是 weex 打包配置的地方,可以看到本来已经有 index 和 entry.js 存在了 。如果有需要,可配置上你需要的打包页面,具体这里就不详细展开了 。有兴趣可看:Weex原理之带你去蹲坑。
3、Flutter
Google 出品,Dart语言,Flutter Engine引擎,响应式设计模式,原生渲染
Flutter 是谷歌2018年发布的跨平台移动UI框架 。相较于本人已经在项目中使用过 react native 和 Weex,Flutter目前仅仅是简单运行过Demo,毕竟还是beta 阶段,这里更多的聊一下它的实现机制和效果 。
与 react native 和 weex 的通过 Javascript 开发不同,Flutter 的编程语言是Drat,(谷歌亲儿子,据说是因为 Drat 项目组就在 Flutter 隔壁而被选上(???))所以执行时并不需要 Javascript 引擎,但实际效果最终也通过原生渲染 。

建一个app平台的费用 移动app开发平台架构

文章插图
如上图,Flutter 主要分为 Framework 和 Engine,我们基于Framework 开发App,运行在 Engine 上 。Engine 是 Flutter 的独立虚拟机,由它适配和提供跨平台支持,目前猜测 Flutter 应用程序在 Android 上,是直接运行 Engine 上 所以在是不需要Dalvik虚拟机 。(这是比kotlin更彻底,抛弃JVM的纠缠?)
如下图,得益于 Engine 层,Flutter 甚至不使用移动平台的原生控件,而是使用自己 Engine 来绘制 Widget (Flutter的显示单元),而 Dart 代码都是通过 AOT 编译为平台的原生代码,所以 Flutter 可以 直接与平台通信,不需要JS引擎的桥接 。同时 Flutter 唯一要求系统提供的是 canvas,以实现UI的绘制 。咦?这么想来,支持web端也没问题吧!
建一个app平台的费用 移动app开发平台架构

文章插图
在Flutter中,大多数东西都是widget,而widget是不可变的,仅支持一帧,并且在每一帧上不会直接更新,要更新而必须使用Widget的状态 。无状态和有状态 widget 的核心特性是相同的,每一帧它们都会重新构建,有一个State对象,它可以跨帧存储状态数据并恢复它 。
Flutter 上 Android 自带了 Skia,Skia是一个 2D的绘图引擎库,跨平台,所以可以被嵌入到 Flutter的 iOS SDK中,也使得 Flutter Android SDK要比 iOS SDK小很多 。
三、对比
这算是互相伤害的环节了吧 。(///▽///)
建一个app平台的费用 移动app开发平台架构

文章插图
1、大小
上面Apk大小是通过 react-native init、weex create 和 flutter 创建出的工程后,直接不添加任何代码,打包出来的 release 签名 apk 大小 。从下图可以看出,其中大比例都是在so库 。
建一个app平台的费用 移动app开发平台架构

文章插图
2、社群
react native 作为 Facebook 主力开源项目之一,至今已有各类丰富的第三方库,甚至如 realm、lottie 等开源项目也有 react native 相关的版本,社群实际无需质疑 。当然,因为并完全正统开发平台,第三库的健壮性和兼容性有时候总是良莠不齐 。
weex 其实有种生错在国内的感觉 。其实 weex 的设计和理念都很优秀,性能也不错,但是对比 react native 的第三方支持,就显得有点后妈养的 。2016年开源至今,社区和各类文档都显得有点疲弱,作为跨平台开发人员,大多时候肯定不会希望,需要频繁的自己增加原生功能支持,因为这样的工作一多,反而会与跨平台开发的理念背道而驰,带来开发成本被维护难度增加 。
Flutter目前还处理beta阶段,但是谷歌的号召力一直很可观,这一点无需质疑 。
3、性能
理论上 flutter 的性能应该是最好的,但是目前实际体验中,却并没有感受出来太大的差距,和 react native(0.5.0之后)、weex 在性能上个人体验差异不是很大 。当然,这里并没有实测渲染的毫秒时间和帧率数据 。
四、未来趋势
我们选择框架的时候,很多时候会关注框架的成熟度和生命力不是么(???) 。
1、React Native
“Airbnb 宣布放弃使用 React Native,回归使用原生技术” : Airbnb 作为 react native 平台上最大的支持者之一,其开源的lottie 同样是支持原生和 react native 。
Airbnb 在宣布放弃的文中,也对 react native 的表示了很大量的肯定,而使得他们放弃的理由,其实主要还是集中于项目庞大之后的维护困难,第三方库的良莠不齐,兼容上需要耗费更多的精力导致放弃 。
ps:( Lottie库Airbnb出的是一个能够帮助解析AE导出的包含动画信息的json文件 。这很好的解决了一个矛盾,设计师可以更专注的设计出各种炫酷的动画效果,而开发只需要将其加入支持即可 。)