京东前两天开源了自主研发框架Taro 1.3,昨天上午又偶然看到了一篇关于比较Flutter和ReactNative的文章,刚好我做过ReactNative,也了解过Flutter,下面我就跟大家谈谈对这两个前端框架的感悟。
前端繁荣昌盛的背后不断出新,三大成熟框架React, Vue,Angular自不必说。自从移动端火热发展后,为了解决H5在移动端性能表现的缺陷,大家又想办法推出新的框架,以便于集成Native端的高性能和Web端快速发版迭代的优势。在这个大背景下催生出了小程序,ReactNative和Flutter,以至于多端融合成为大前端新的发展趋势。关于这方面的内容我去年还专门写了一篇技术博客《基于React Native浅谈多端融合技术》,感兴趣的同学可以点击文章底部的链接进行阅览。
刚开始接触ReactNative是在去年6月份,当时部门要做一个内部办公平台APP,想尝试下新技术,就选了比较火热的ReactNative。当时我被派去开发这个项目时,整个人是懵逼的,因为啥都不懂呀。因为我当时主要负责Android开发的相关工作,对于web端还比较生疏。后来部门又派出了一个ios开发的同事,并从外面招了一个搞React开发的外包,我们前端临时3人组就成立了。别问我为啥不直接招一个搞ReactNative开发的,因为招不到啊,当时专门搞这个的人还比较少。想着React和ReactNative都是一家公司出的,名字也挺相似的,应该八九不离十吧,哈哈。后来证明这种想法还是蛮正确的,不然我们的项目也不会顺利上线,当然这都是后话了。
接下来跟大家聊下我做ReactNative开发的一些感悟吧。
FaceBook 2015年推出跨平台移动应用开源框架ReactNative,目的就是兼顾移动端Android和ios,同时抛开了传统H5开发的一些思想。在ReactNative中没有WebView,开发者也不能直接在浏览器中运行。但是ReactNative比较好的是语法类似于React,学习成本比较低,而且在开发环境下可以实现热更新,开发者可以很方便地在手机或者模拟器中调整样式和功能。但是ReactNative也有一些与生俱来的弊端,它虽然跨过了WebView,但底层还是调用原生组件,只不过在中间做了一层桥接。但是它实现原生的能力又有限,不支持多媒体,在复杂场景下内存性能有瓶颈。而且最关键的一点,它没有继承H5发版更新的优点,虽然在开发环境下可以实现热更新,但是生产环境还是要和原生部分一起打包进APK。当时发版上线的时候我还专门研究了这部分的功能,将相关操作都整理在了博客《ReactNative打Release生产包报错error: failed parsing overlays》。
当时做这个项目的时候,刚好一位京东ReactNative架构组负责人来我们公司做分享。主要演示了他们团队在ReactNative上面进一步做的开发工作,当时感觉FaceBook对ReactNative的支持还不是特别成熟,好多功能都需要自己去实现,而且ReactNative的不同版本之间差异也比较大,更新起来会遇到很多问题。后来他还给我们演示了自主研发的一款IDE,可以将小程序和H5一键转化,在底层抹平了不同组件的差异,当时那位负责人说等以后成熟了会开源出来供大家使用,我猜想那款IDE应该就是Taro的原型了。
昨天看到Taro开源的消息,内心不由地给京东团队一个大大的赞👍。不光是因为国内又自主研发出了一个新的前端框架,更重要的是他们这种不断探索和尝试的精神很值得我们学习。其实我本人是一直不怎么看好ReactNative的,它从一出生就备受争议,在国内也没有广泛流行起来,虽然带来了一些性能提升,但还有很多技术瓶颈需要克服。但是京东团队一直在潜心基于ReactNative开发,而且也有了一定的研发成果,希望能给ReactNative带来新的曙光吧。
最后我们再来聊聊Flutter。Flutter是Google2018年发布的一款新的多端融合技术框架,Flutter采用不同的方法避免由JavaScript桥接器引起的性能问题,即用Dart程序语言来编译,Dart是用预编译的方式编译多个平台的原生代码。但是Dart对开发者增加了学习成本,且UI布局复杂,不如XML可读性高。Flutter支持的库不如React Native和原生多,而且很多组件需要重新开发,不如ReactNative灵活。
Flutter的上述缺陷是由它的基因决定的,它从一出生就是个全新的框架,它不会像ReactNative那样通过桥接层去调用原生组件,而且自己完全开发一套新的组件库。目前Flutter主要致力于移动端开发,未来统一web和原生所有端,真正实现前端大融合:write once, run everywhere。
我之前一直从事Android原生开发,最近致力于学习H5,主要学习它背后的设计模式和思想。等H5学习得差不多了,我打算去学习下Flutter,目前国内这个框架使用还比较少,阿里的咸鱼团队在帮着Google踩坑。虽然它的发展还不是特别成熟,学习成本也比较高,但是与其在岸边观望,不如下水一试。通常,一种新的技术要想被人接受需要一个过程,但在此过程中走在最前面的人,往往是最早的受益者。历经了ReactNative开发,等我对Flutter有一定深入了解后,到时再给大家带来更加有益的分享吧。
以上是我对前端框架的一些感悟,如果你有其他更好的想法,欢迎留言交流。