使用 React Native 一年后的感受

oschina
 oschina
发布于 2016年06月22日
收藏 190

当我在面试Discord的时候,技术主管Stanislav跟我说:

React Native代表着未来。等它一发布,我们就会用它从零构建iOS应用。

作为一名原生iOS开发者,基于先前使用PhoneGap的经验,我非常怀疑使用Web技术构建移动应用的这种方式。但是当我学习并使用React Native一段时间之后,我非常庆幸我们做了这个决定。

开发效率

虽然iOS“团队”只有我自己一个人,但是iOS应用开发依然可以赶上Web和桌面应用开发闪电般的速度。Apple公司已经允许开发者使用JavaScriptCore进行应用的升级,而无需等待App Store的审核流程。这对于那些缺乏专业的iOS QA(质量保障)团队的小公司来说是非常便利的,因为iOS团队可以在发布新功能之后进行热更新。

使用React Native一年之后,我们的iOS开发周期明显变快了,这得益于很高的开发效率。比如:

  • 基于现有的前端架构,我们在两周之内就发布了V1.0的版本。

  • 相比于Auto Layout,基于Flexbox的样式可以节省一半的代码,并且更容易理解。

  • 使用Flux设计模式,iOS和Web应用共享了storeaction的98%的代码。

性能

React Native在后台线程运行JavaScript并发送极小的代码到主线程中。事实证明,React Native相比于Objective-C或Swift编写的原生iOS应用来说有一些性能差异!

Reactiflux小组的性能演示,该组有超过1.1万个会员 —— UI和JS线程大多数都是60FPS

然而,我们当初开始构建iOS应用时发现聊天滚动视图的性能并不令人满意,尤其是一些活跃的聊天分组。于是,我们决定使用ComponentKit构建聊天视图并编写必要的桥接代码代替原有的方案。当JS线程在完成一些繁重任务的时候,类库也无法提供原生那样流畅的动画(译注:之前动画是在JS线程执行,目前有人提交了一份代码,有望使用原生iOS动画接口),因此我们在抽屉侧滑动画上继续使用PopAnimation

注: 作者称该应用仅聊天视图和抽屉动画是原生代码实现的,其他均由React Native实现。

当React Native Android版本发布时,我们也尝试在Android设备上运行应用,但遗憾的是,我们遇到了一些性能问题,只好暂时放弃。Android开发主管Miguel是这样说的:

很遗憾,不同Android设备的性能差异很大,这点明显落后于iOS。我们可以让应用运行地很快,但是性能——尤其是触摸事件,即使在更高端设备上也不能令人满意。并且在早期,由于React Native Android缺乏完善的功能,我们从产品原型过渡到成品应用比iOS花费了更多时间。

可用性

React Native让开发工作更简洁,使得开发者可以专注于每个新版本核心功能的开发。应用内自带的开发者菜单为我节省了大量的时间。

其中我最喜欢的一个功能是Show Inspector(审查工具),它可以即时展现交互视图的层级结构以及被选组件中所有必要的样式信息,这无疑是我用过的最棒的iOS审查工具。

社区

React Native项目每两周会发布一个新版本,其中包含一些新的特性以及修复的bug。这有利有弊,好比iOS几个月的稳定版本的发布,新的代码需要额外的时间进行升级,尤其是生产环境中的应用。因此,这也是到目前为止我们fork的React Native仓库只有四次主要升级的原因。

由于React Native还不太成熟,资源有限,也不完整。但随着它越来越流行,在不久之后一定能赶上其他成熟的技术。下面列出了一些实用的资源,我也经常在它的仓库上提问和获取最新的信息:

译注:中文资源:React Native学习指南

总的来说,React Native很有潜力,它把我们团队的移动应用开发带上了一个新的台阶。像我这样原生的iOS开发者可以平滑地过渡到React Native,这有些出乎我的意料。同时,它也帮助我扩展职业技能,因为我也可以很轻松地向React编写的Web应用贡献代码了。

原文:https://discord.engineering/using-react-native-one-year-later-91fd5e949933 
译文:http://www.dobest.me 

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 OSCHINA 社区 [http://www.oschina.net]
本文标题:使用 React Native 一年后的感受
加载中

精彩评论

也无涯
也无涯
对于react-native,我觉得最重要的是 遇到坑,你是否填得了。如果没信心,请还是老实一点用hybird吧
okoala
okoala
现在看某种技术火不火最重要的还是看社区。JS毋庸置疑目前来说是最火, 而且RN本身理念非常优秀。
1. 底层CSS-Layout也有一些大厂参与进来优化,Flex的实现也跟着W3C走,搞定index后布局也越来越方便,目前界面开发基本纯Web化,可以说这是这种趋势。PC端跨平台开发也是优先考虑使用Electron这种类似的技术的。
2. 最近RN把大量操作移动至Native线程,释放JS线程,深入到JIT层面的优化,Bridge也使用C++重新实现,可以说性能不会是问题。
3. 在合并RNPM进来后,包管理又前进了一步,现在模块之间可以共享静态库。
4. 而且React Native其实属于引擎,上层你可以把React换成Vue2或者Angular2等前端库。可以说整个方案可以非常灵活。
5. 目前官方虽然只有Android和iOS的跨平台支持,其实可以扩展到OSX、Windows和Web等平台。
6. 动态更新非常方便,代码易维护,组件易复用。
7. 可以使用一些很碉堡的前端库,比如:Relay、GraphQL、Redux等,整个数据流操作体验很极致。
....
(太多了说不完)

当然RN还是偏前端~其他端的程序员可能看它不爽,这个可以理解~
但是一个不争的事实是:目前越来越多的RN应用在AppStore发布了~包括很多大厂

最新评论(31

带刀的麦兜
带刀的麦兜

引用来自“阿cat”的评论

说到底、、、app里潜入网页.体验是个问题,慢慢长大吧!

引用来自“Night_Rain”的评论

不懂不要瞎说哦,底层是调用原生控件 不是网页

引用来自“阿cat”的评论

别装,说底层还C语言呢

引用来自“seamon”的评论

你确实是不懂。react native并不是app里嵌网页,而是调用原生控件。不懂不是错,去多看书学习吧,但是不懂别硬装,让人笑话。

引用来自“MGL_TECH”的评论

好吧 你很懂 很牛逼 我不懂原生控件直接渲染JS H5 我不懂渲染出来的应用比原生的一模一样 我不懂跟浏览器渲染出来的完全不一样 你都懂 行了吧 你没有笑话 你懂不是错 懂但装逼就错了 也多看看做人方面的书籍,人品有很大的提升空间!
终于体会到了什么叫没文化真可怕
S
Simon_Wang_1996

引用来自“okoala”的评论

现在看某种技术火不火最重要的还是看社区。JS毋庸置疑目前来说是最火, 而且RN本身理念非常优秀。
1. 底层CSS-Layout也有一些大厂参与进来优化,Flex的实现也跟着W3C走,搞定index后布局也越来越方便,目前界面开发基本纯Web化,可以说这是这种趋势。PC端跨平台开发也是优先考虑使用Electron这种类似的技术的。
2. 最近RN把大量操作移动至Native线程,释放JS线程,深入到JIT层面的优化,Bridge也使用C++重新实现,可以说性能不会是问题。
3. 在合并RNPM进来后,包管理又前进了一步,现在模块之间可以共享静态库。
4. 而且React Native其实属于引擎,上层你可以把React换成Vue2或者Angular2等前端库。可以说整个方案可以非常灵活。
5. 目前官方虽然只有Android和iOS的跨平台支持,其实可以扩展到OSX、Windows和Web等平台。
6. 动态更新非常方便,代码易维护,组件易复用。
7. 可以使用一些很碉堡的前端库,比如:Relay、GraphQL、Redux等,整个数据流操作体验很极致。
....
(太多了说不完)

当然RN还是偏前端~其他端的程序员可能看它不爽,这个可以理解~
但是一个不争的事实是:目前越来越多的RN应用在AppStore发布了~包括很多大厂
然而Relay用起来并不是十分酸爽,体验并非极致
也无涯
也无涯
对于react-native,我觉得最重要的是 遇到坑,你是否填得了。如果没信心,请还是老实一点用hybird吧
s
seamon

引用来自“阿cat”的评论

说到底、、、app里潜入网页.体验是个问题,慢慢长大吧!

引用来自“Night_Rain”的评论

不懂不要瞎说哦,底层是调用原生控件 不是网页

引用来自“阿cat”的评论

别装,说底层还C语言呢
你确实是不懂。react native并不是app里嵌网页,而是调用原生控件。不懂不是错,去多看书学习吧,但是不懂别硬装,让人笑话。
mrlly
mrlly
你文章中的图是什么软件,ReacNative的IDE吗?
请叫我赵小宝
请叫我赵小宝

引用来自“阿cat”的评论

说到底、、、app里潜入网页.体验是个问题,慢慢长大吧!

引用来自“Night_Rain”的评论

不懂不要瞎说哦,底层是调用原生控件 不是网页
哈哈 评论有亮点
Night_Rain
Night_Rain

引用来自“阿cat”的评论

说到底、、、app里潜入网页.体验是个问题,慢慢长大吧!
不懂不要瞎说哦,底层是调用原生控件 不是网页
没有银弹的开发平台,本身就是最大的问题
海诺者
海诺者

引用来自“okoala”的评论

现在看某种技术火不火最重要的还是看社区。JS毋庸置疑目前来说是最火, 而且RN本身理念非常优秀。
1. 底层CSS-Layout也有一些大厂参与进来优化,Flex的实现也跟着W3C走,搞定index后布局也越来越方便,目前界面开发基本纯Web化,可以说这是这种趋势。PC端跨平台开发也是优先考虑使用Electron这种类似的技术的。
2. 最近RN把大量操作移动至Native线程,释放JS线程,深入到JIT层面的优化,Bridge也使用C++重新实现,可以说性能不会是问题。
3. 在合并RNPM进来后,包管理又前进了一步,现在模块之间可以共享静态库。
4. 而且React Native其实属于引擎,上层你可以把React换成Vue2或者Angular2等前端库。可以说整个方案可以非常灵活。
5. 目前官方虽然只有Android和iOS的跨平台支持,其实可以扩展到OSX、Windows和Web等平台。
6. 动态更新非常方便,代码易维护,组件易复用。
7. 可以使用一些很碉堡的前端库,比如:Relay、GraphQL、Redux等,整个数据流操作体验很极致。
....
(太多了说不完)

当然RN还是偏前端~其他端的程序员可能看它不爽,这个可以理解~
但是一个不争的事实是:目前越来越多的RN应用在AppStore发布了~包括很多大厂
据说已经可以开发MacOS应用了
返回顶部
顶部