RN是什么
ReactNative早在2016年的时候火了,当时只是草草的了解了一下,知道它是个跨平台的移动端技术解决方案,而且支持代码下发的方式更新产品,苦于没有落地实践的机会,并没有深入了解。自从去年底公司产品日渐成熟,自己有足够的时间,于是决定学习一下RN并尝试做了个Demo。
RN适合前端还是客户端?
如果你问我,RN到底适合前端开发人员开发还是客户端开发者开发?
我的回答是:更适合客户端开发者开发。
有的人说,不是啊,你看代码主要是react.js和style,客户端只要将代码打包集成到相应的平台即可。js和style不是前端开发者的本职工作嘛。
乍一看,上述理解貌似很正确,可以当你真正学习了RN之后,你会发现,其实RN开发跟移动开发过程没什么区别,我说的是开发的思维,比如生命周期,事件的响应,页面的跳转等等。
如果要说区别只有2个方面:
1.换了一个开发语言而已,由原来的客户端Java或OC换成js,这个学习成本并不高,尤其对一些有过JS基础的几乎可以直接上手。
2.UI布局,如果你是一名iOS开发者,你一定很诟病iOS的布局,因为iOS布局只有2种:frame绝对布局和Autolayout相对布局。frame布局就不说了,面对众多手机尺寸根本无能为力,缺乏灵活性,在如今的iOS开发中,已经处于淘汰的地位;AutoLayout作为iOS6推出的布局技术,基本上可以很轻松的解决70%的布局,但是,针对动态内容布局,尤其是依赖的组件需要根据不同情况展示隐藏等,你要频繁的移除、添加约束,而变更约束是比较耗性能的操作,从而影响UI的流畅性,另一方面相应的代码逻辑会变得非常臃肿,简直就要疯。缺乏类似前端优秀的Flex布局(iOS9新增了UIStackView,终于引入了盒子布局,算是解决了这个痛点)。所以,对于iOS开发者,需要转变一下布局思维,由相对布局到学习Flex布局。而flex布局学习成本就更低了,我觉得读一下阮一峰老师的那篇Flex布局基本上就可以开发了。这里附一下阮一峰老师的那篇地址:阮一峰 Flex布局
除上述说到的2个方面外,ReactNative其实和客户端开发差不多了。
首先,针对style,其实,RN支持的style属性就仅仅是原生组件所支持的所有属性,原生控件没有某个属性,style也就用不了,至于前端什么float,margin:auto, 这些根本无效啊,所以,很多没有客户端基础的前端,以为RN的style和H5的style一样,那你就大错特错了,所以,你说客户端转RN快,还是H5学习RN快呢?
然后,RN中几乎每个页面都要设计安卓iOS不同客户端的平台的不同特性处理,如果你仅仅是一名H5,不了解2个平台的特性,你会非常的痛苦,所以很多同学说RN坑很多,是的,坑确实很多,但是如果你是客户端开发者,RN的很多坑都能理解了,对你填这些坑也有很大帮助。
还有就是,从渲染的角度,RN本质也是原生控件渲染出来了,这跟H5通过webView渲染有本质区别,所以说,RN是原生的。
所以,我认为RN更适合客户端开发者开发,由于iOS和安卓平台的差异,一个RN项目,应该至少配一名iOS和一名安卓RN开发,虽然说,RN跨平台,但是毕竟iOS开发者不是很了解安卓平台,反之亦然,当然,如果是一名兼iOS、安卓开发者除外。
由此,RN技术的使用,并不是为了节约开发成本的,在我看来,而是看重了RN的热更新的能力,众所周知,苹果的审核条条框框限制很多,对于一个大型的项目,审核的方面就很多,经常会因为一些权限、政策条款而被拒,又要重新修改提交上架审核,这样就耽误了公司层面的运营时间,这也是很多大型电商平台诸如去哪儿、58同城使用的原因吧。
RN的难点
RN真正的难点不在业务的开发,它的难点在于,应对不断增多的业务js文件,由于RN运行需要先加载jsbundle文件到内存,进行解析,最后再渲染到UI层,而jsbundle文件的加载是耗时的,如何解决初始化页面白屏,等待的时间如何减少才是核心技术的难点。
曾经看到过一个关于58项目RN拆分通用jsbundle,再合并的帖子,能降低70%的js加载时间。这是很好的例子,希望能有机会遇到这样的性能瓶颈然后去解决这样的问题。
网友评论