共计 2500 个字符,预计需要花费 7 分钟才能阅读完成。
Flutter 的趋势
在移动端,受成本和效率的驱使,跨平台一站式开发慢慢成为一个趋势。从 Hybird,RN,WEEX,Flutter,到各种小程序或快应用的大量涌现,虽然很多跨平台方案都有各自的优缺点,目前还没有完美无缺的终极方案,但这已是未来移动端开发不可逆转的一大方向。而 Google 推出并开源的移动应用开发框架 Flutter,更是其中的明星。
笔者从自身在做 Flutter 相关的分享中,特别强烈的感受是,有非常非常多的 Native 技术栈的同学在学习和使用 Flutter,有非常多的前端技术栈的同学在时刻关注 Flutter 的 hummingbird 和 desktop-embedding 的进展。尤其自 Flutter1.0 发布后,Flutter 受到了业界更多的关注和期待。
跨平台解决方案比较
目前几个主流的跨平台解决方案:
基于浏览器技术的 Hybird
基于桥接 Native 组件,如 RN、WEEX
基于底层统一渲染,如 Flutter
它们有各种的优缺点,但浏览器技术无疑是其中的历史最长、标准最完善、用户最多、生态最丰富的。RN、WEEX 也可以归类为 javascript 生态的一个小分支。而 Flutter 走的是和前两者截然不同的路线,它是一个新兴的挑战者,通过底层统一渲染,得到高度一致的跨端效果;通过引入 dart,得到 AOT 的接近原生的性能,和 JIT 的快速开发体验;通过上层完善的组件体系(material design & cupertino),得到高保真的 UI 体验。但它也并非尽善尽美。同时基于底层统一渲染的跨平台方案有很多,在移动端有实际应用的如 QT、cocos2d 等。
对比 Flutter 和 QT,最大的区别在语言和背后团队。
语言:Flutter 选择了 Dart,QT 是 C ++。Dart 相比 C ++,对开发者来说无疑于相比骑自行车和开飞机的区别,Dart 更容易编写,除此以外,Dart 还拥有 AOT 和 JIT 两种模式、类型安全、快速内存分配等等特点,确实如 Flutter 团队所述,同时拥有一两条这些优点的语言不少,但是将所有这些优点集于一身的,只有 Dart。
背后团队:Flutter 的背后是 Google,QT 的背后是 TrollTech,从社区影响力和号召力而言不可同日而语。
但同时也必须要认识到的是通过底层统一渲染的跨平台方案,也有它天然的劣势。它很难复用系统天然提供的组件。在摆脱对操作系统的依赖和复用操作系统的能力上,要考虑如何达到了一个最佳的平衡。
Flutter 的生态
如果拿 Flutter 生态同 React 和 Native 进行比较的话
基于核心 UI 表达层向上,这一层会更接近前端的体系,以 React 生态为参照物,主要的几部分
路由体系
一种面向以 Flutter 为主的应用,它的路由以 Flutter 为主,Native 的路由部分往往以简易桥接的形态存在。
一种面向混合技术栈为主的应用,它的路由以 Native 为主,Flutter 为辅。
状态管理体系 | 应用框架
基本上在 React 生态下有的状态管理,Flutter 也有,同时有一些是 Flutter 独有的。
开源的代表有:flutter_redux, google 的 BLoc,scoped_model,及闲鱼的 fish-redux,它在真实的复杂场景下得到了非常好的验证。
UI 库体系
目前已有不少 UI 库,包含常见的组件。
基于核心 UI 表达层向下,这一层会更接近 Native 的体系,以 Native 生态为参照物,主要的几部分
核心的一些基础中间件,如网络,图片,音视频,存储,埋点,监控等。
目前和 Native 相比还是有非常大的差距。所以也导致了目前大部分这些问题的解决方案,都趋向于桥接的形态。通过复用 Native 能力来短期补齐 Flutter 能力不足的。但它不一定是未来的最佳的方案。
一些重量级的基础组件,如 WebView,MapView 等。
目前已经能通过 PlatformView 的形式,得到能力拓展。但是它有使用的局限性和性能上的损失。
Flutter 今年几个重要的突破点
Code-Push
在当下国内应用生态环境,热修复或者热部署能力在很多公司和团队做技术选型中,往往是其中非常重要的一个选项。如果有 Google 官方推出,不管是 hotfix,还是 dynamic-boundle 都将极大的推动 Flutter 在国内的发展。
而基于 dart 语言的特性判断,在 Flutter 上做 code-push 理论上会比目前任何 Native 的 code-push 方案有更强的能力。闲鱼团队一直和 Flutter 团队就这方便保持紧密的联系,在之前的验证中,目前在 android 端是可以支持的,但还留有一些瑕疵。
Humming-Bird
在跨平台之外,还有一层更高级别的诉求,多应用投放,打破应用之间的孤岛壁垒,实现更多的商业价值。而要完成多应用的投放,首选的是基于浏览器的方案。Humming-Bird 方案为这样的设想,提供了可能。
同时 Humming-Bird 也将大大扩张了 Flutter 的边界,吸引更多的开发者和厂商的加入,同时让面向终端的全栈解决方案成为可能。Dart 语言也有可能成为 javascript 生态的更好的补充和演进。
Flutter 面向未来
基础架构设计决定了一个软件的发展上限,它带来了更多的想象力。使用 Flutter 和 Dart,既是 Google 为摆脱和 Oracle 纠缠多年的“Java 侵权案”提前下的一颗棋,也是 Google 为下一代操作系统 Fusion 下的一颗棋,是即 Google 通过 chromium 项目渐进的统一浏览器领域,着眼于更多的终端,为了一个更大终端生态的大一统做准备。这让 Flutter 和 Dart 充满了更高层次的可能。如果没有这些可能,Flutter 的生命无疑是会短暂的,因为它还未能建立被广泛被认可的标准,就像我们终端里走过的那么多的技术一样,都是有限的解决了当下的诉求,但随着终端的更替,操作系统的演进,慢慢变成了明日黄花。而正是这些更多的可能,是 Flutter 持续演进的源泉,是 Flutter 相比其他的跨平台方案中最吸引人的部分。
本文作者:闲鱼技术 - 吉丰阅读原文
本文为云栖社区原创内容,未经允许不得转载。