Flutter之我见

这两天花了点业余时间,大致了解了一下,尝试写了几段代码。对于原理什么的还是一窍不通,如果想要深入了解,推荐看看闲鱼的分享,我只是对于语法和 UI 写法有一点简单的认识。说的不对,还请大伙轻喷。相互学习,共同进步。

我对 JS 也不熟,只是简单了解过 JSX、Rax 和 Weex 相关的一些东西。刚开始写 Flutter 的时候,由于我是做 Native 开发的,所以第一感觉就是居然跟 JSX 有点像,我觉着,如果真的是对 JS 很熟悉的前端开发人员要做 Flutter 开发的话,应该会很快上手。不过比较恶心的一点是控件嵌套太多了,比起 Rax、React 那种差太远了,更别提跟原生 Native 开发的 XML 布局相比了。一眼望去,全是花括弧和圆括弧,这个巨大的硬伤估计会让很多人敬而远之。

Flutter 有不少特性估计会让 Android 原生 Native 开发人员增加不少好感。天生对 Material 的良好支持;而且像 Native 开发那样内置很多 style,可以直接调用,而不需要像 Rax 和 React 那样要自己写一大堆 CSS;还有就是 IDE 支持,Android Studio 安装插件就可以,虽然 Weex 也可以用 WebStorm,但是单就语法提示这一项,Flutter 就比 Weex 更能吸粉。

Flutter 现在的致命伤是跟 Weex 一样,依赖支持库真的比 Native 开发差的太多太多了,而且依赖管理和 DSL 可能要落后 Gradle 三四年,当然,这可能也是因为 Gradle 太先进了。这一点,志在取代 Java 的 Kotlin,目标可能会更容易现实。

还有一点,我严重怀疑大多数人根本没实际尝试过,就随便说 Flutter 的性能接近原生 Native。我自己在 Sony Z3+(15年旗舰机)上实际测试得出的数据是,debug 版本,一个 item 只有一个英文单词的 ListView, 安装后前几次启动起码要白屏 1 秒钟才能显示出来列表数据,而且前几次滑动用 GameBench 测得的帧率没有任何一次超过 40 帧的;而同样场景的 Native 代码,都是瞬间启动,滑动也都是满帧。我丝毫不怀疑 release 版本,它会有更好的表现,但是至少同等条件下,并不像那么多营销文说的那样达到了 Native 开发的性能和体验。我翻了下一下 GitHub 的 issue,有不少人都吐槽滑动有明显卡顿的。还有路由跳转返回的时候,卡顿也很明显。不过,我听一个技术非常非常厉害的朋友讲,虽然 Flutter 滑动帧率确实不高,但是动画表现非常不错。现在还只是 1.0,相信以后会慢慢优化好的。

不管怎样,我都觉着跨平台开发会是以后一个趋势。不管是 RN、Weex,还是 Flutter,作为技术人员都不应该排斥,前端技术的相互影响,相互促进,会对人的思维和习惯产生极大的正面作用。即便是为了混饭吃,这也是一个不错的方向。