作者 | James
修改 | Yonie
布景
最近一段时间 Flutter 的技能热度十分高,各个大厂和许多开发者都在活泼的学习并测验。关于 Flutter 的科普文章现已十分多了,Flutter 的长处也不再骜述。本文会结合 Flutter 和 React Native 的实践项目中的遇到的问题,进行相对客观的比照,也指出一些现阶段 Flutter 的不足之处,防止咱们踩坑。
JS VS Dart
Facebook 最正确的一点便是让 RN 选用 JS 作为开发言语。因为 JS 具有十分好的群众基础和较低的学习门槛,所以 RN 不只能够招引很多的前端开发者参加,并且能够和 React 社区构成正向互补,进一步稳固 Facebook 在前端范畴的统治力。根本上一切合格的前端开发者都能够低成本的学习并运用 RN 进行跨端开发。Google 让 Flutter 选用 Dart 进行开发,或许是根据对未来的判别,期望 Dart 能够逐渐替代 JS 成为前端的开发规范。实践上 Dart 的语法更挨近原生开发言语,用 Java 或许 Swift 的开发者会愈加喜爱。能够幻想下,团队在进行技能选型的时分,必需求考虑招 JS 的开发者简单仍是招 Dart 的开发者简单呢?
综上所述,这点上 RN 暂时胜出。
开发调试环境
咱们团队一起做过 RN 和 Flutter 的开发项目,从东西链来说,两者都十分老练、调试都十分便利。可是从开发环境的建立来看,尤其是集成到已有 APP 项目中,RN 相对来说就简单太多了。咱们为了让 Flutter 集成到已有 APP 中,做了很多工程化改造,乃至别离预备了 debug 和 release 两种开发形式。事务模块的集成打包方面,RN 也愈加便利和灵敏,能够按不同 GIT 库进行事务办理,打成不同的 jsbundle 别离集成。而 Flutter 开发需求集中式办理,在同一个 GIT 中进行保护。
综上所述,这点上 RN 暂时胜出。
原生混合开发支撑
原生混合开发方面其实是 RN 的强项。因为 RN 的组件本来便是通过原生 UI 体系进行烘托,所以能够十分简单的完成在原生页面中嵌入 RN 的 RootView 或许在 RN 页面中嵌入原生 UI 组件,对已有 APP 上进行混合开发支撑十分友爱。而 Flutter 因为不管是在原生页面中嵌入 FlutterView 或许在 Flutter 页面中嵌入原生 UI 组件,都会有内存或许功用等不少问题。现在国内实践比较多的是闲鱼团队,也开源了 FlutterBoost 项目测验处理这个问题,可是官方一直还没有十分完美的处理计划。所以 Flutter 更适合在全新 APP 上运用。
综上所述,这点上 RN 暂时胜出。
热更新支撑
热更新一直以来都是 RN 结构的卖点之一,不管是微软供给的 CodePush 服务仍是各个大厂自己建立的热更新渠道,例如国内京东、携程都有十分老练 RN 更新渠道。而 Google 则彻底没有计划支撑 Flutter 热更新功用,从现在了解的信息来看,京东 JDFlutter 在 Android 渠道现已完成了热更新,可是实践效果和灵敏程度仍是远远不及 RN。而受限于苹果的约束,iOS 渠道上没有一家公司真实意义上完成了 Flutter 热更新。开源项目 MXFlutter 通过 JS 开发的方法,曲线救国直接的完成了 Flutter 动态化。尽管是很有价值的测验,可是扔掉 Dart 改为 JS 开发也会带来其他更多的问题。
综上所述,这点上 RN 暂时胜出。
全渠道支撑
其实不管 RN 仍是 Flutter 都有相当大的野心完成全渠道制霸。除了 Android、iOS 渠道之外,RN 现已能够通过第三方东西支撑 Windows UMP、Web、Desktop、macOS,乃至近期京东开源的 Alita 项目 现已完成 RN 到微信小程序的打通。而 Flutter 现在还不完善,尽管以现已官方支撑了 Android、iOS、Desktop、Web,可是实践测验下来老练度还不行,特别是 Hummingbird 还处于前期阶段,转化后 Web 的功用还达不到出产环境的要求。
综上所述,这点上 RN 暂时胜出。
开发者生态支撑
RN 的 Github Star 现已达到了 80K,并且借助于 React 生态,有很多的第三方插件能够运用。微软、airbnb 等公司也贡献了很多高质量的插件,整个开发者生态十分完善和活泼。相比之下,Flutter 的生态刚刚处于前期阶段,尽管 Github Star 也现已有 72K,可是全体可用的第三方库的数量不如 RN。当然,咱们也看到 Flutter 生态最近开展很快,Dart Pubs 上的揭露库数量也日趋上升,根本能够满意一般事务的开发。
综上所述,这点上 RN 暂时胜出。
结构稳定性
从团队实践运用 RN 和 Flutter 结构状况来看,RN 通过 4 年的开展和不断迭代,现在的稳定性和兼容性现已有了很大的改进。Github 上 open issue 只要 500 多,并且国内不少大厂例如京东、携程等也在大规模运用中,全体上稳定性现已抵达出产环境的要求。可是因为 RN 全体架构规划的约束,还比较依靠原生组件,所以跟着 Android、iOS 的体系迭代,未来仍是需求继续的完善稳定性和兼容性。所以咱们也主张大厂在使用 RN 结构的时分,能有专门的原生团队保护和优化 RN 引擎,能够带来最大的收益。Flutter 的版本号现已快速迭代到了 1.7,不过实践运用中遇到的问题仍是比较多的,功用和稳定性方面还有很长的路要走,更让人忧虑的是 Github 上有 7000 多的 open issue。并且 Flutter 引擎部分很多 C 代码,比较不流畅难明,一般团队很难去优化进行稳定性加固。
综上所述,这点上 RN 暂时胜出。
Flutter 真的不如 RN 吗?
文章最终有必要强调下,技能层面其实 RN 和 Flutter 没有孰优孰劣的敌对联系,都是十分超卓的跨端结构。尽管上面列了不少 Flutter 的问题,可是这些都不是不能处理的问题,而是处于前期阶段任何结构都或许遇到的问题。相反从全体架构规划和全体规划上来说,我以为 Flutter 比 RN 愈加超卓,归于下一代的跨端结构。咱们能够预见到在几年后 Google Fuchsia 体系正式发布的时分,这才是 Flutter 能够大显神通的时间。
可是现在阶段,RN 才是业界最老练的跨端结构。
活动引荐
前端坐落研制的使用层,永久对迭代速度要求很高,一起又跟从事务在不断开展改变,团队也在快速开展和改变,工程化面对的应战一直很大。在这个超级 APP 割据,又有很多后继应战者的移动互联网后半场,没有最好的工程化计划,只要最适合的工程化计划。