查看原文
其他

react-native技术的优劣

Coco-LG 终端研发部 2022-08-26


终端研发部

关注并回复“1024”,加入技术交流群 ,致力于技术开发和职场

学习相关更多的技术,可参考《技术文章集合—184篇文章分类汇总》,再往下看, 在工作和学习交流中,你是否以正确的提问方式寻求别人的帮助?

原文链接:https://www.jianshu.com/p/21c649df1a36

前言

从2017年初开始到现在,使用React-Native做项目已经一年了。我们做的是一款IM软件,嵌入在一个手机游戏平台的工程内部。之所以要采用react-native(后文简称RN)框架重构它,是因为现在游戏大厅上的所有游戏都是热更新的,为了也能让这个IM软件实现实时更新,减少IPA升级的次数,RN当然是不错的选择。

经过一个同事将近一年的预研以后,2017年我们全面开启项目重构。奔着热更新和Write once, run everywhere,从此走上RN填坑之旅。

从ES6,css-layout,redux开始

我一直在从事iOS开发,用OC语言,接触到ES6还是挺新鲜的。语言风格和C系语言完全不是一个风格。RN采用标签式的界面布局,叫css-layout,和CSS基本一样。虽然是第一次使用这种方式布局界面,用熟之后觉得还是很方便的,代码量少,很直接。
聊天部分我们使用了redux架构,是JavaScript的一个状态机。

参考

http://www.redux.org.cn/index.html

RN的优势

  • 调试方便
    ipa安装好之后,就不需要频繁编译了,只需要reload一下,把js代码从云服务器下载下来就可以呈现改变代码后的效果。而且RN支持hotReload,在调试界面的时候非常方便,修改代码之后保存,界面就自动跟着变化,这一点在调试的时候实在很爽,不过有时候有点慢,需要reload。chrome在线调试也挺不错,可以打断点,看日志。虽然没有xcode或者Android Studio那么浑然一体,但是作为脚本语言的调试工具,也是很厉害了。

  • css-layout布局
    这对于前端程序员来说,降低了不少学习成本,也大大减少了代码量。但是对于iOS或者安卓开发者来说,刚开始接触的时候,得接受一些思想上的转变。

  • 跨平台
    大多数代码,只需要写一套,安卓和iOS就都可以运行了,游戏逻辑和数据。界面上一部分有一些平台区分,毕竟是从react包装上来的。刚开始学iOS的时候,就想象着,要是有一种跨平台的开发形式就很6了,没想到过了几年就有了。跨平台理论上是可以减少开发成本的,减少开发人员数量,但是实际效果并不然,后面说。

  • 热更新
    这可能也是大多数公司选择使用RN的主要原因。频繁的app升级会让用户很烦,而且苹果的审核真是很麻烦。现在很多大型app都使用了RN,毕竟繁多的业务迭代,每次都通过APP审核,也算是噩梦啊。

  • 有个好爹
    有着Facebook的支撑,相信会发展的很好。

RN的不完善

容我吐槽一下,不完善的地方实在太多了,和原生开发体验来比,堪称天壤之别。RN现在的最新版本是0.46,我们工程中用的是0.42,毕竟还没上1.0呢。
去掉主观情感,下面列举一下部分不完善的点:

  • 开发体验一般。
    虽然js语法很灵活,但毕竟是脚本语言,调试起来还是不方便,不好查错。我们用的表现较好的vscode编辑器,就这都感觉各种跳转很不方便,动不动就得全局搜索,可能是xcode用习惯了吧。脚本语言的编写也会慢慢习惯吧。

  • 文档很粗略
    官网上的文档,就只是简单介绍用法和各个控件的属性,对细节的描述很少。当你遇到难解决的问题或者踩到坑了,上面基本找不到答案。

  • 两个平台还没有完全统一
    很多控件都是iOS专属,或者安卓专属。还有同一些控件,在不同平台上表现差异很大。

  • 控件不完善
    这个其实挺多的,最基本的ListView,功能缺失,坑很多。Text不支持富文本,动画,手势,ScrollView等等等等。不能一一列举。作为聊天软件,富文本功能必须实现啊,用于emoji表情和文字的混合显示。被迫自己搞了一套实现方案,现在还有点小bug。具体实现方案参考http://blog.csdn.net/gang544043963/article/details/70245850

  • 升级RN版本需要大动干
    近期我们做了一次RN版本升级,从原来的0.42升到最近的0.50。真的挺麻烦。新版把PropTyps从React中移了出来,那么之前的引用方式就得变,所有的文件挨个查。之前使用的第三方库,有和PropTyps相关的,都得一一更新。之前很多界面布局的时候,在image上放置了一些其他控件,升级后会报错,然后一一调整。

  • 要做出优质app需要花费大量人力和时间去打磨
    跨平台,其实并没有减少开发成本,原来我们安卓和iOS各三个人,每次迭代都是有序进行。然而换了RN之后,6个人全上,做的累的啊,迭代慢,bug多。

总结

FaceBook也是想为开发者带去一套跨平台、动态更新的 Javascript 框架,口号是:Learn once, write anywhere:Build mobile apps with React。我觉得这是一个伟大的梦想。

2015年刚发布的时候,充满了期待和争议。发展到现在,RN也是逐渐在完善。前一段时间苹果发警告邮件的事情引起了大家的恐慌,不过以我看,RN还是安全的。从苹果的审核政策来看,允许运行于JavascriptCore的动态加载代码,并且没有去使用人家的私有方法。而且,现在使用RN的大公司挺多,尽管苹果高傲,但是要禁止RN的话,还是得掂量一下这些大企业的意见吧。

RN目前确实还不够成熟稳定,所以,想入坑的开发人员和决策者在入坑前得多权衡。虽然作为技术开发者应该具备对新技术的敏锐嗅觉和快速学习能力,但是对于项目的技术更新,还得要根据实际情况,要慎重。用户体验,开发成本,是两个最重要的权衡指标。

毕竟,不管是react-native,JSPatch,还是其他人更新技术,从户用体验和开发体验来说,都是开倒车的。

RN适合什么人或公司

  • 迫切需要热更新功能

  • 愿意投入人力和财力给RN

其他普通的应用,没那么迫切需要热更新的,就好好使用原生开发,毕竟原生的成熟度和稳定性要比RN好很多。

阅读更多

 精文推荐|分享几个小程序开发框架及工具

玩Hook技术?这三个选择题能答对算我服你!

面试必备之UI刷新大解密

除了敲代码,你还有什么副业吗?

相信自己,没有做不到的,只有想不到的

在这里获得的不仅仅是技术!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存