iOS开发人员进入React Native的旅程

像许多iOS开发人员一样,我对JavaScript也有不好的看法。 我记得JavaScript是一种怪异的,狂野的西方语言,其中没有两种环境是相同的。 我对JavaScript的记忆是在Xcode的本机工具远远优于Web工具的时候形成的-我们有很酷的东西,例如情节提要,自动完成,内置在开发环境中的大量反馈以及无处不在的集成库。

工装

从那时起,多年来,Web以惊人的速度取得了进步和成就,而Xcode基本上(在Swift中添加了Playgrounds)或更低(Swift重构工具)。 JavaScript语言和开发环境已经发展。 我们喜欢的Xcode的所有功能-IDE自动完成,内联文档,语法错误的即时反馈-基本上已内置于现代环境中。 故事书-基本上等效于Xcode Playgrounds-很棒(并且通过VSCode内置的Orta的扩展)。

测试中

JavaScript测试(通过Jest🃏)是另一个联盟。 它几乎是即时的,是自动的(它监视Git的更改并运行受影响的文件的测试),具有类似RSpec的语法,并且可以在每次保存时运行。 本机单元测试始终感觉像是事后的想法,以至于有些博客文章介绍了Apple发布的虚拟现代测试框架。

XCTest很棒,但是感觉就像是一个旧式测试框架。 它与JUnit几乎没有什么不同,仅限于一种setUp方法和一种tearDown方法,并且无法在保存时自动运行测试。 诸如Quick / Nimble之类的替代方案非常现代,但是,如果没有Xcode内置的第一方支持,基本功能(如运行单个测试)将丢失。

反馈回路

JavaScript的反馈循环比本地反馈快得多。 我从未从事过没有荒谬反馈周期的大型本地项目。 在某些项目中,从git clone到副本更改可能要花费整整30分钟的时间 。 增量构建可能在20秒到3分钟之间的任何时间-刚好足以失去焦点或被Twitter分散注意力。 模拟器重新启动,并且必须手动导航回控制器是很痛苦的。

输入:热重装。

最佳的反馈循环会对开发人员的工作效率和代码质量产生巨大影响。 当反馈循环很长时,编写代码的方法是如此不同 -我发现自己试图一次创建整个功能或整个屏幕,进行编译,并希望在我喝咖啡或散步时获得最好的效果。 如果以分钟为单位来计算编译时间,则无法实现真正​​的TDD。 在JavaScript允许的较短反馈循环中,我发现自己正在练习红绿重构,真正的TDD并进行实时设计迭代。

React Native的性能和“感觉”

甚至当我开始听说非本地开发环境中的改进时,我都sc之以鼻。 我记得PhoneGap应用程序感觉如何,使用Xamarin有多困难(多年来可能有所改善?)。 我记得用这些技术制作的移动应用程序感觉不对 他们如何缓慢滚动或过渡。

但是,尽管React Native肯定会增加一些开销,但它的性能足够快,以至于我很难知道我使用的是本机应用程序还是本机应用程序。 当涉及到需要高性能代码的事情时,您可以在React Native应用程序中本地编写该代码,这意味着您可以在99%的情况下使用更好的开发环境,更快的周期,热重装以及更好的测试。 对于其余1%的情况,很容易退回到您可能已经习惯的本机环境。

未来

React Native的未来并不像Swift的未来那样确定。 几乎没有人担心苹果会在明天,下周或明年放弃Swift,但谁知道React Native在五年内是否仍会是一个活跃的项目? 这些担心是公平的,但实际上考虑五年后的技术是没有意义的。 拉起手机。 分页浏览您的应用程序。 这些应用程序中有多少已经存在五年以上了,而在已经存在的应用程序中,最近有多少没有经过完整的重写或重新架构?