在过去的两年里,Airbnb一直在使用Reaction Native来加速他们的移动平台的开发。Reaction Native是由Facebook开发的开源框架,允许JavaScript开发人员创建熟悉的可跨Web、Android和iOS开发环境工作的Reaction组件。
最近,加布里埃尔·皮尔(Gabriel Peal)写了一篇文章,概述了Airbnb决定在2019年之前放弃Reaction Native,转而使用本地移动开发工具。我们与Gabriel坐下来讨论了Airbnb的移动开发历史,Reaction Native的介绍,它的优点和缺点,以及最终为什么Airbnb决定放弃Reaction Native。
最初,Airbnb只是一个在移动平台上流量不断增加的网站。到2012年,工程团队认识到,为了支持其移动用户群的需求,他们需要在移动平台上投入更多资源。在四年的时间里,该团队利用专门的移动开发资源和基础设施构建了iOS和Android应用程序。
然而,到了2016年,移动领域的格局已经发生了如此大的变化,以至于开发团队跟不上需求。由于没有移动开发人员所需的人才,而且绝大多数开发人员都接受过网络培训,一些团队开始考虑跨平台解决方案。
Airbnb的Web前端是用Reaction构建的,而且Airbnb的绝大多数开发人员都很喜欢这个流行的Web框架。2016年,Facebook在其iOS和Android应用程序中内部使用后,推出了Reaction Native。团队中的一些开发人员认为这是利用他们现有的Web开发团队来帮助开发他们的移动应用程序的一种很好的方式。几个月后,随着测试版应用程序的准备就绪,Airbnb推出了他们使用Reaction Native的第一套组件,以支持他们的iOS和Android原生应用程序。
REACTION Native迅速增加了其移动应用程序的开发周期,并进一步投资于开发、支持其800,000行移动代码库并为其提供基础设施。
显然,对Airbnb来说,反应Native的最大好处是它的快速开发和平台不可知论。有了Reaction Native,Airbnb可以利用其整个开发团队的工程师来帮助构建和支持他们的移动应用程序。这也意味着,未来的员工也可以接受培训,无论他们的移动或网络背景如何。它还意味着更精简的代码库,因为一个存储库可以跨三个平台部署。但伴随着这些好处,挑战也随之而来。在建议使用(或不使用)Reaction Native时,Peal没有说明性,但在决定使用Reaction Native时提供了以下考虑:
一种常见的误解是,当Airbnb决定使用Reaction Native时,他们做出了完全的改变。这不仅不是真的,而且到目前为止,Reaction原生代码只占代码库和开发人员资源的15-20%。它从来不是该公司的多数平台,部分原因是为移动平台启用第一套组件的巨额前期成本。
尽管Reaction Native是一个框架,极大地简化了移动开发,但启动和运行并不是一件容易的事,特别是如果您有一个现有的代码库。希望投入大量的时间和精力将Reaction Native集成到您现有的移动代码库中。
对于API在两个平台之间具有清晰桥梁的简单应用程序来说,Reaction Native是一个很好的选择。在Airbnb移动应用程序的早期,该平台是移动应用程序中简单工具的强大加速器。最终,API将不会完全按照您想要的方式运行,您将不得不深入本机库进行必要的调整。
需要编写本地桥的一些示例包括网络堆栈、实验、国际化、深度链接、导航和高级地图功能。
如果您聘请JavaScript开发人员来处理您的Reaction Native项目,预计他们将不得不编写本机代码来弥合功能上的任何差距。
PEAL警告说,“代码中的地雷或交互作用可能极难追踪和复制。其中一个例子涉及到在某些手机上呈现全白色的反应原生组件。这个漏洞不仅不可靠,而且很难追踪到。
解决方案是关闭初始化Fresco,这是Android的标准Reaction Native图像渲染库。直到今天,工程师们仍然不明白为什么这样修复了这个漏洞。如果Airbnb可以遇到地雷,把看似简单的任务变成长达数周的捕虫行动,那么预计你也会这样做。
许多团队将使用Reaction Native制作一个小型移动应用程序的原型,并立即相信它将解决他们所有的问题。但与所有开源软件一样,该平台也在不断变化,每天都会发现新的错误和问题。预计将进行持续的投资,以支持反应性土著生态系统的多变景观。
一个例子包括Airbnb工程师希望尽快进入Reaction Native框架的补丁,以与他们的产品目标保持一致。不幸的是,Reaction Native的开发生命周期每四周才推出一次版本。如果他们修复的时间不对,他们将不得不等待将近一个月的时间,他们的更改才能被Reaction Native框架采用。以Airbnb的发展速度,他们根本承担不起这种风险。
最终,缺点超过了好处,这促使Airbnb重新考虑,并最终退出反应原住民发展。虽然支持将持续到今年年底,但Airbnb计划在2019年初停止积极开发Reaction Native项目。
即使您仍然不认同本机优先开发移动应用程序的价值,除了Reaction Native之外,还有其他跨平台的选择。Ffltter是Google对Reaction Native的回答,之前曾在“软件工程日报”(Software Engineering Daily)上报道过(你可以在这里和这里查看我们之前的节目的更多内容)。Xamarin是微软的Reaction Native版本,另外还提供对Windows手机的支持。
虽然这两个框架都是跨平台的,但可以发现类似于上面概述的问题。此外,这两个框架在Google和Microsoft内部的采用率分别相对较低。最终,虽然跨平台框架解决了大多数简单问题,但任何更复杂的问题最终都需要您求助于给定移动设备的原生平台。
[0:00:00.3]JM:Reaction Native允许开发人员在移动平台之间重用前端代码。用React Native编写的用户界面组件既可以在iOS代码库中使用,也可以在Android代码库中使用。由于Reaction Native允许代码重用,这可以为开发人员节省时间,而不是完全独立的团队必须为iOS和Android重新创建前端逻辑。
“反应原住民”是在Facebook创建的。Facebook本身使用REACTION Native进行移动开发,并为开源REACTION Native存储库做出了巨大贡献。2016年,Airbnb开始在其移动代码库的很大一部分中使用Reaction Native。在接下来的两年里,Airbnb看到了采用跨平台的基于JavaScript的系统的优点和缺点。两年后,Airbnb的工程管理团队得出结论,停止使用Reaction Native。
加布里埃尔·皮尔(Gabriel Peal)是Airbnb的一名工程师,他参与了搬离Reaction Native的决定。加布里埃尔写了一篇博客文章,给出了Airbnb反应原住民的背景故事,他加入了这个节目,提供了关于这一决定的更多细节。这一集有很多内容。就我而言,这真的是一部很好的电影,它确实让“反应原住民”的优点和缺点有了很大的体现。我要澄清的是,这不是一个反对“反应原住民”的节目。Airbnb有一个非常具体的用例,而且它是一家庞大的公司,所以并不是说Reaction Native是你不应该使用的东西。事实上,我们已经做了很多关于反应原住民优势的节目,我认为这是一个令人难以置信的平台。这是一个很棒的节目,它给出了故事的两个方面。
在我们开始之前,我们要雇佣一位有创意的运营主管。如果您是一位出色的沟通者,请查看我们关于创意运营的招聘信息,地址为。
softwareEngineeringdaily.com/Jobs。对于刚从编程训练营毕业的人,或者正在进军技术行业的有艺术背景的人来说,这是一份很棒的工作。如果你想要有创造力,想要学习更多关于工程的知识,并且你有出色的职业道德,请访问softwareEngineeringdaily.com/Jobs。
[0:02:27.6]JM:云计算可能会很贵。如果您在云基础设施上花费了太多钱,请查看doit International。DOIT国际帮助初创企业优化其在Google Cloud和AWS上的工作负载成本,以便初创企业可以花更多的时间构建新软件,而减少降低成本的时间。
doit International帮助客户优化他们的成本,如果您的云账单每月超过1万美元,您可以通过访问doit-intl.com/seDaily获得免费的成本优化评估。网址是D-O-I-T-I-N-T-l.com/seDaily。这项评估将向您展示如何在您的云上省钱,DOIT国际将免费提供给我们的听众。他们通常收取5000美元的评估费用,但DOIT国际公司向每月花费超过1万美元的节目听众免费提供这项评估。
如果你不知道如果你的公司那么大,你是否要花1万美元,那么你很有可能要花1万美元,所以你可以去问问财务部门的其他人。
DOIT国际是一家由云工程和优化专家组成的公司。它们可以帮助您使用承诺、Spot实例、合适的规模和独特的购买技术,从而帮助您更高效地运行基础设施。对我来说,这听起来非常特定于领域,所以从这个角度来看,雇佣一个团队来帮助您了解如何实现这些技术对我来说是有意义的。DoIT International可以帮助您编写更高效的代码,它们可以帮助您构建更高效的基础设施。他们还编写了自己的定制软件,这是Google Cloud的一个完整的成本优化平台,可以在reOptimize.io上获得。io是一项免费服务,如果您想了解doit International能够构建什么。
DOIT国际公司是云成本优化方面的专家。如果您花费超过10,000美元,您可以通过访问doit-intl.com/seDaily获得免费评估,看看您可以在云部署上节省多少钱。
[0:04:51.1]JM:Gabriel Peal是Airbnb的一名软件工程师,他是一篇关于Airbnb的Reaction Native的博客文章的作者。Gabriel,欢迎回到软件工程日报。
[0:05:02.3][0:05:02.3]JM:Airbnb在过去的两年里一直在使用Reaction Native开发移动应用。我想从头开始讲一些Airbnb的反应原住民的故事。在Reaction Native出现在Airbnb之前,移动应用程序是如何开发的?
[0:05:20.9]GP:是的。这是一个有趣的故事。当我们回顾Airbnb移动业务最早的日子时,它们实际上是在2012年左右开始的。那时,手机还很年轻,我们只是一个网站,随着时间的推移,我们意识到拥有移动应用程序的重要性。不仅是为了预订房源,也是为了旅行者,因为通常当你旅行时,你所有的都是你的手机。对我们来说,拥有真正良好的移动体验真的很重要。
2012年和2013年,我们开始构建移动应用的早期阶段,然后发展到每个平台上大约15人的团队;2016年年中,Android和iOS。现在,在这一点上,我们开始看到大量的移动流量涌入。我们的手机使用量达到了顶峰,它从业务中极小的一小部分变成了极其重要的东西。然后,鼓励团队确保他们的功能在移动设备、Android和iOS上都有效。每个平台上有15个人,我们确实没有足够的人来构建我们需要的东西。
[0:06:28.0]JM:嗯,团队结构问题,也就是Reaction Native背后的整个想法是,Reaction Native将为您提供可重用的组件,从而允许不同团队之间的一些通信集中化。如果我理解正确的话,你可以设计一个组件,让它在Android、iOS和Web之间可移植,这就是Reaction Native的目标。我敢肯定,当“反应原住民”问世时,人们会说,“哦,那是我们的问题。”
[0:06:59.7]GP:是的。我猜人们在思考反应时会有两个相似但不同的口头禅。有一个“到处学一次”的口头禅,在那里你可以学习反应范例,你可以学习JavaScript、JSX和生态系统,然后你就可以在任何平台上写东西了。然后是“一次编写,随处运行”,您只需编写一次代码,它就可以在多个平台上运行。
在“原生反应”这个特定的范围内,实际上两者都有一点,理解它们为什么不同,并理解您试图从哪一个中收集到最大的价值,这一点很重要。它始于“一次学习,随时随地写”的模式,因为在Airbnb,早些时候,我们有大约15名Android和15名iOS工程师,但公司里可能有超过100名了解Reaction的人。我们的整个网站是RESPECT,对我们来说在RESPECT中重写我们的网站是非常成功的。我们还建立了大量的基础设施和库,并高度利用Reaction周围的生态系统。
我们认为这是一个机会,可以在我们现有的本地基础设施的基础上进行建设,然后让了解情况的人做出反应,为移动做出贡献。这将是他们从移动网络中学到的东西。这就是说,随着时间的推移,很明显,因为Reaction Native实际上是Reaction,它不是Reaction的分支,它不是Reaction的克隆,它实际上是在你的手机上运行的Reaction。正因为如此,您确实可以共享大量代码,可以利用大量相同的库。我们在Reaction社区中使用Redux和许多其他行业标准库。
虽然在组织上存在一些挑战,而且实际上开始在网络和移动设备之间共享代码,但我们看到了这样做的潜力,要么直接共享代码,要么让同一个人在网络和移动设备上分别编写一次功能,因为他们可以重复使用大量的思考过程。
[0:08:58.1][0:08:58.1]JM:当你开始使用Reaction Native的时候,你只是做了一点实验,还是做出了一个非常果断的决定,让我们就这样做,让我们全力以赴地使用Reaction Native。
医生:这取决于你问的是谁。这实际上是我们在“原生反应”中遇到的最具争议性的组织挑战之一。从本质上讲,它是作为一项实验开始的。我认为在工程界,把这一切都当作一个工程问题来对待真的很重要。它有利有弊,了解全套或尽可能多的利弊是非常重要的,这样才能降低风险,帮助顺利而不是艰难地推出。这真的,真的很重要。
一开始就像是个实验。基本上有两位工程师:利兰·理查森(Leland Richardson)和斯派克·布雷姆(Spike Brehm),他们都是非常有经验的反应工程师,他们与一些移动领域的人合作,比如我和其他几个人,在移动领域打造产品。我们都以为是预订变更了。这是我们与“反应原住民”合作推出的第一个项目。我们从2016年7月开始建设,然后在10月份推出。在这个过程中,我们必须建立一系列的东西,比如实验、国际化、深度链接、导航、我们的设计语言和许多其他东西。
大约在同一时间,事情开始发生很快的变化,因为在2016年11月,我们推出了Experience,这样你就可以通过Airbnb预订在城市做的事情和住宿的地方。这个特殊的团队有大量的网络资源,但没有足够的移动资源来在发布前实际构建他们需要的东西。这成为了Reaction Native的关键时刻,因为该团队刚刚决定全力以赴为他们的产品推出Reaction Native,在我们推出第一个非常非常重要和非常引人注目的发布之前。
这是一个机会,它可以有很多不同的方式。这当然不是没有痛苦的。我认为把它搬出去是一件很忙碌的事情,有很多工作要做,需要很多长时间,但最终它还是推出了。它准时发射。不是没有bug的发布,但它确实按时发布了,如果不是为了在那个时间发布而让其他团队的工程师离开,他们就不可能完成功能集的构建。这成了一个有趣的案例,一个团队只是为了-他们的手被迫朝这个方向发展,结果在很早的时候就戏剧性地加速了Reaction Native的采用。
[0:11:44.7]JM:好的,让我看看我的理解是否正确。“反应原住民”问世了,Airbnb移动开发的不同团队说,“是的。我们来修修补补吧。让我们试一试,做几件事,国际化等等。然后,体验被宣布为我们要构建的一项功能,体验团队做出了一个非常理性的决定,我们有很多网络资源,我们有更少的移动资源。好吧,让我们看看能不能全力以赴与“反应原住民”合作。让我们拭目以待吧。“。他们全力以赴与Reaction Native合作,他们做到了。
准时装船。他们不得不把人从其他团队中拉出来,但听起来它确实运得很好。到目前为止,我的理解是正确的吗?
[0:12:29.5]GP:它启动了。每一次发布都有-很少有发布是完美的、顺利的、没有错误的,这不是像其他发布那样的发布,但它走出了大门,人们能够使用它,人们能够预订它。从某种意义上说,这确实让他们达到了他们的目标。
[0:12:46.3][0:12:46.3]JM:我感觉到有一些-听起来像是有一些基础的东西,当体验正在建立,或者当它被发布时,你就像是,“哦,不。这里有些不对劲。“。
[0:12:58.2]GP:我认为准确地理解这一点非常重要,是的,再进一步分析一下。Reaction Native是指将Reaction Native添加到现有代码库,特别是如果它是一个更大的代码库,它自己有很多基础设施,就像我们的过去和现在一样,考虑这种交互将是什么样子,以及您必须重新创建、重新构建或桥接什么机构基础设施,这真的很重要。在这种特殊的情况下,这就像是一场猫和老鼠的游戏,他们只是-为了建立一个屏幕,你想要能够利用我们的网络堆栈,你想要能够-我们进行实验是至关重要的,所有的国际化都必须通过国际化的管道。没有其他选择。如果我们想要真正发货,我们必须提前完成这项工作。
在Reaction Native的情况下,从0到1需要做大量的工作。我的意思是,这不是我们可以简单地把它钉在上面,然后孤立地写一个屏幕就可以发货的东西。这很简单-这永远不会是一次好的经历,它会使那些选择使用i的团队陷入瘫痪。
..