闲聊 Flutter

bang 2018-08-27 12:10

移动端开发从08年开始就有个大家前赴后继不断追求的目标:跨平台,15年时 nwind 有篇雄文,详细调研了跨平台各流派,其中最后的Dart 栏可以看到现在Flutter的雏形。可以看出来,Flutter是从精简浏览器的思路演化过来的,实际上web与Flutter从底层看是一致的,web是提供了一层平台无关的独立引擎,可以看成平台只提供了画布,所有的UI组件、框架、事件处理都是web引擎封装处理。其实这种虚拟机方式是跨平台的正道,在GUI跨平台的道路上,JAVA、FLASH都是这种方式,在PC时代都取得过成功,只不过移动端时代只有web这种开放标准能平衡各大公司利益,延续下来了。

原本web作为跨平台的解决方案很完美,FB最初也信心满满用web技术做主APP,但到最后还是搞不定性能问题,被迫回归原生。为什么web性能不行,上面雄文也说了,历史代码兼容,CSS复杂,DOM接口粒度大等问题,自然有牛人们继续不断去尝试解决这些问题,面对历史包袱满满的web引擎,首先尝试的当然是不断删代码删功能,做个精简版的web引擎,完全抛弃兼容性,只保留最主要的功能,据Eric Seidel 说删完后快了20倍,于是朝这个方向经过几年的努力逐渐演化出Flutter。(国外大厂可以花三四年时间做一个引擎且还在Beta,怕不怕?)

Flutter的推出为略为沉闷的移动端技术注入了一些活力,底子强,包装好,只要接入引擎就能获得跨平台+高性能的特性。不过Flutter还是有不少缺陷:

  1. 动态化,国外对跨平台有偏执,国内对动态化的偏执更高,高速发展高压环境,随时发版修改是基础能力,Flutter Release是AOT无法动态化,理论上可以用JIT模式做动态化,但目前Release上没有JIT模式,不确定是否有性能上的问题,国内大厂接入使用少了一个很重要的理由。
  2. 体积,编译后iOS双架构15M+,Android单架构约7M,不算太大,对小APP可以接受,但在大厂大APP普遍严格控制体积的情况下,使用又多一个大障碍。
  3. 语言,从web演化过来的框架,为什么不使用JS而是使用Dart?可能出于性能考虑,Dart有AOT模式,但使用Dart绝对是Flutter推广的一大劣势,学多一门新语言就多一层障碍,Java对Android开发的推动,JS对nodeJS的推动,换个语言就不一样了。
  4. 生态,Flutter刚推出不久,组件功能的完善度和丰富程度自然不能跟发展了十几年的iOS/Android原生以及web相比,虽说生态都是慢慢建立,但这一个从语言到工具到组件都是几乎从零开始积累,无法借用强大的前端生态或其他生态,难度会高很多,堪忧。

不管怎样,Flutter是一个宝库,一个完整的比webkit简单得多的引擎,源码很值得挖掘学习,现阶段国内关注Flutter也是学习居多,直接使用Flutter目前吸引力还不够大,但国内可能有另一个利用Flutter的途径:小程序。Flutter从web引擎简化中来,使用的也是CSS flexbox布局,但抛弃历史包袱重定规则,不兼容web也不是dom那套玩意,需要上层业务根据新规则限制写法,而小程序就是这样的限制框架,可以参考Flutter构建小程序渲染引擎,相对于web渲染性能好,相对RN渲染,同渲染引擎坑少,无需维护两个平台框架。可行性待研究,算是一个有趣的课题。

[返回] [原文链接]