1. webstack前端栈首页
  2. 经验/观点

一个资深iOS开发者对于React Native的看法

 一个资深iOS开发者对于React Native的看法

前言

React Native 是 Facebook 2015年开源的 Javascript 框架,旨在使用 Javascript 高效开发手机端 App。配合着多个显而易见的优势和 Facebook 强大的宣传机器,它立刻成为国内外大小公司的明星开发框架。在各大开源社区的热情参与和各方博客的宣传追捧,导致越来越多的开发者采用React Native去开发应用

React Native会成为主流吗

对于 React Native,iOS 开发者社区也是褒贬不一。有一部分的开发者认为React Native无论在性能,开发成本还是效率都要比苹果原生那套要好,成为开发的首选;也有一部分的开发着认为React Native 不过是 Facebook 的又一个玩具,以它现在的稚嫩还难以对原生的 Swift/Objective-C 造成足够威胁。
笔者有过几年亲身开发 React Native 和原生 iOS 的经验,以及在各大开源社区的所见所闻,针对这个问题提出自己的看法。对一门新兴的技术是否值得在开发采用,取决于该技术的本身是否具备足够的优点和是否符合目前的开发需求。
下面给大家从技术和开发需求两个角度出发谈谈React Native。

React Native 的技术特点

1.跨平台开发

目前React Native官方已经支持iOS、Android两个平台的移动设备,民间也有一些大牛在做macOS、tvOS,甚至UWP平台的适配。但由于不同平台特性不同,并不能一份代码在所有平台上直接运行,React Native的思想是「Learn once, write anywhere」,我们需要针对不同平台的特性写出不同的代码,尽量保持组件的高可复用性。

2.快速编译

比起 Xcode 中漫长的编译,React Native 采用了热加载(Hot Reload)的即时编译机制,使得 App UI 的开发体验大幅改善,几乎到了和网页开发一样随改随变的效果。

3.快速发布

由于App Store应用商店发版迭代效率问题,热更新成为了iOS平台非常渴求的功能。React Native通过 JSBundle,React Native 可以即时更新 App。相比原来冗长的审核和上传过程,发布和测试新功能的效率大幅提高。

4.渲染和布局更加高效

官方宣称性能堪比Native,实际使用中我们会发现几个问题,比如复杂视图渲染出View层级过多、ListView(等同于iOS上的UITableView)无重用机制、有些组件存在内存泄露。这就会导致在部分低端Android机型上的性能过差,复杂的、大型的应用会有明显性能问题。

5.学习成本

对于iOS开发者来讲,要了解相当数量的Web前端开发知识才可以进行开发,对于Web前端开发者来讲,对于原生性能调优则需要原生开发知识和经验,所以说学习成本略高。

6.开发效率

Android和iOS平台可复用很多组件,仅部分代码需要各自平台分别维护,所以比开发两个平台原生应用效率要高得多。加上本身可动态渲染的能力,不用重新编译,Command⌘+R即可重新渲染界面,开发效率更是惊人地快。

7.第三方依赖

React Native 严重依赖于 Facebook 的维护。苹果在 iOS 上每次技术的更新、政策的改变都会让原来使用了 React Native 代码库受到影响,等待 Facebook 和社区的修复会妨碍 App 的更新和用户体验。前段时间,百度和开发者们弃用
React Native 而迫使的 Facebook 修改开发者权限(License)事件,证明了开发依赖于第三方的风险确实存在。

8.联调的困难

对于原生的 iOS 和 Android App 引入 React Native,会增加整个代码库的复杂度,在深入底层原生代码进行 debug 时也是困难重重,可以说是在开发和维护上的成本都有所增加。
另外,有很多人觉得 React Native 的性能不如原生的 Objective-C/Swift 好。笔者自己尝试过,感觉不了很大的差别。在各大开源社区中,一些大牛发表了他们的看法得知,React Native 的性能与原生相比只有毫秒只差,根本不会对用户体验造成影响。

App 所面对的开发需求

作为 iOS 开发者,脱离了应用谈技术,好比镜中花、水中月——空谈而已。我们从以下的几种情况分析适不适合引入 React Native。

1.从零开始开发一款简单的 App。

如果你独立开发者想尝试新鲜技术或者是初创公司的第一代产品,这种情况下非常适合用React Native去做开发。因为你产品的UI和业务逻辑都比较简单,React Native可以满足你绝大多数的需求,而且可以用最短时间,最小成本迅速开发第一波应用。

2.从零开始开发一款比较复杂的 App

这有可能是一个公司新的产品线,也有可能是一个成熟 App 的重构。在这种情况下,质量、口碑、以及日后的维护就是首要考虑因素,原生的 Swift/Objective-C 在面对实际问题时解决方案更加成熟多样,React Native 发挥不了其技术优势,故而原生开发是更为稳妥的选择。

3.在原有的 App 中引入新的功能

这种情况比较复杂,它又分为以下几种情况

(一)原来的 App 代码库是 100% 的 Objective-C/Swift。

这种情况下我个人不推荐引入 React Native。因为技术团队已经稳定在 iOS 和 Android 两个技术栈上了,引入第三个技术栈,技术上增加复杂度和维护成本,人员上要组建一个新的 React Native 团队,开支和组织架构上都有负面影响。除非有足够的预算,或是后期有大幅采用 React Native 的计划,否则不推荐引入 React Native。

(二)验证新功能该不该引入。

验证过程中公司有时间成本,高层希望的是短期内就能做出决策。React Native 正是这种情况的银色子弹。据我所知 Tesla 的 App 就采用了这种机制。

(三)新功能确定引入,不是核心功能,并不复杂。这种情况下当然可以尝试 React Native。

如果是网页端类型的 App 或是功能,比如淘宝、携程、京东之类,他们本身就有大量的网页端开发经验,不如直接让负责的前端工程师来处理相关的移动端业务。即使不成功也不会影响主要业务,同时可以为公司的技术积累提供宝贵经验。Facebook 和 Instagram 的主 App 目前在部分小功能上就用了类似的循序渐进得采用 React Native 的策略。

总结

笔者认为,单纯从技术角度来讲,React Native 绝对是移动端不可多得的优秀框架。它状态机的思路可以被借鉴用来写原生的 View Controller,其 UI 布局上的机制也对我们平日在性能上的优化提供了灵感。
只有在快速开发、节约成本的考虑之下,React Native 才能发挥出巨大的优势。对于 iOS 开发者,React Native 只可作为适当补充,我们还是应该多多钻研 Swift / Objective-C 以及 App 开发的思路,它们才是进阶成长的关键所在。

原创文章,作者:webstack,如若转载,请注明出处:https://www.webstacks.cn/experience/388.html

发表评论

登录后才能评论

联系我们

在线咨询:点击这里给我发消息

邮件:webstacks@163.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code