24

闲聊 Flutter

 6 years ago
source link: http://blog.cnbang.net/tech/3605/?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

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

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

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK