到目前为止,大多数iOS开发人员可能都听说过Airbnb正在远离React Native。看到网上的反应有点奇怪——人们表现得很高兴,几乎在庆祝这一宣布。我在twitter上看到一些iOS开发人员对Airbnb尝试使用RN存在质疑。但我不是在这里谈论iOS开发者社区的狭隘,我是在这里谈论Airbnb(相当优秀)的博客文章。
这些博文非常棒,因为Airbnb首先列出了它对React Native的期望,然后解释了这项技术在多大程度上满足了(或未能满足)这些期望。这是一个彻底的、诚实的讨论,关于大型团队如何评估技术,以及这些团队如何面对他们的决策的后果。
所以我真的很喜欢这些文章,但我不认为它们是完整的。稍后将进行更详细的讨论。首先,我想谈谈Airbnb的实际期望。我在这里总结一下,但是你确实应该自己读一下这些文章。
以下是Airbnb对React Native的目标,我将其解释为对技术的期望:
1.让我们作为一个组织更快地行动。
2.保持原生(Native)的质量标准。
3.为移动设备编写一次产品代码而不是两次。
4.改善开发人员的体验。
好的,那四件事怎么样了?好吧,我再说一遍:
“工程师能够以无与伦比的速度前进”,但也有技术和文化方面的障碍减弱了这些期望。
而且,取得的成功是指:“我们能够完成许多我们不确定的事情。”但他们指出了同样的技术挑战和缺乏内部工程资源,这有时会让团队感到沮丧。
最重要的失败原因(*):“我们在三个平台而不是两个平台上支持代码”,这听起来很严峻。而且,“我们的应用程序中只有一小部分是React Native”,这意味着他们有很多开销,但没有太多的好处。我想更详细地讨论这个期望,但在需要太多时间了。
一个“混合包”,有些东西更简单,更快,同时其他的东西会变得更糟糕。
(*注意:我对#3作为失败的描述一直存在争议;你应该阅读Leland Richardson的帖子回复我,以便对Airbnb在Android和iOS之间共享代码的经验进行非常精彩和细致的澄清。)
好吧乍一看,这看起来很有希望,对吧?我的意思是,Airbnb表示“60%[工程师]会将他们的经历描述为惊人的”,因为您团队的大多数人都参与其中。但5%是“强烈消极”?有趣。很有意思。我们很快就会回到这里,首先让我们谈谈第三个期望。
每个人都在谈论的重点是第三点:Airbnb预计能够在Android和iOS上重复使用代码,但却失望了。他们希望“一次编写,随处运行”体验。这就是我对这些帖子的问题以及如何讨论它们。
React Native显然不是“一次编写,随处运行”,尽管这是一种常见的误解。您可以编写一个应用程序并部署到Android和iOS的想法很有吸引力,像Expo这样的解决方案确实存在,但跨平台代码重用并不是React Native的主要卖点。 React Native是一个“一次学习,随处写”的平台;而不是为多个平台构建一个应用程序,React Native的主要卖点是它允许您使用React。
就是这样。
因此,当人们将Airbnb的决定定位为React Native的失败时,我想知道他们对React Native的用途有多了解。如果你期望技术可以做一些不是为它设计的东西,那么当它无法实现时你会感到失望,这不是技术的错,是吗?而且,如果您的应用程序仅仅是“只有一小部分”使用该技术,那么您将无法获得尽可能多的好处。
我试图不把它作为Artsy-vs-Airbnb的讨论框架,但是很难避免这种比较,因为Artsy在我们的React Native代码上取得了如此巨大的成功。我认为其中很大一部分来自于我们如何构建我们的React Native代码:所有JavaScript都在自己的存储库中,并且它作为CocoaPod发布。本机应用程序只是导入该pod并从中实例化视图控制器,就好像它们是普通的视图控制器一样(因为它们,它们的视图恰好是React Native组件)。对于我这种很不满意在Artsy的应用程序中使用js的人,在没写任何js代码之前我们使用了一年RN的原生代码包,这很大限度地减少了我的开销。
这种感觉会让我回归文化。我认为这些博客文章在描述其体验的技术部分方面做得非常出色,但他们缺乏对采用React Native的非技术障碍的详细描述。
什么样的障碍? 好吧,不要再提起iOS开发者社区的狭隘,但是...... iOS开发人员在更广泛的软件行业中享有盛誉。 查理·奇弗(Charlie Cheever)在世博会发布的观点撰写有关这一主题的文章,可以这样说:
[...]组织中有些人认为自己是iOS程序员、Android程序员很难对React Native感到高兴。 特别是iOS程序员对它非常不满意,并且普遍认为JS是公司代码库的一种侵扰,而Android程序员则有更复杂的感受。(重点补充。)
当我看到一个团队的大多数人将他们的经历描述为“惊人”,并且该团队的极少数人(但很普遍,我敢肯定)将其描述为“非常消极”,这让我对Airbnb上有关React Native的内部讨论感到疑惑。
我明白了,我真的做到了。我认为JavaScript也是一种感染。我花了很长时间才克服它。我的意思是,如果你被聘请编写Swift / Objective-C而且你的团队突然要求你使用JavaScript,那么很自然会感到沮丧,甚至生气。 但你知道吗?工程师不只是编写代码,更重要的是解决问题。当然工程师会对他们团队使用的工具有所了解,我认为未来的博客文章应该涵盖Artsy如何减轻原生iOS开发人员和我们的React Native选择之间的紧张关系。 但是我希望我们能够更加关注我们的感受。
Airbnb的经验恰好可以作为拒绝使用RN的参考。如果你的公司的文化只允许原生开发,那么RN肯定是不合适的。
Airbnb选择离开React Native的原因不仅仅有技术还有文化,虽然我理解为什么他们没有宣传这些紧张局势,但它给人的印象是Airbnb的决定完全基于技术优势。事实并非如此。