Airbnb 之后,Udacity 也加入弃用 React Native 队列

by admin on 2020年3月27日

在线教育机构 Udacity 宣布放弃使用 React Native。

澳门新葡亰网址下载 1

好久没有来更新博客了,给大家说声抱歉,人一旦懒惰起来连自己都害怕。可能是因为一个人生活,少了很多动力吧。这都是在给自己找理由。我在不偷懒了。
最近我要入坑了,公司安排我要开始搞React
Native了,之前也给大家分享过一篇RN的搭建框架,那时候只是对RN感兴趣想有时间学学,但是现在要投入更多的时间。

这周领导让我给搭建分享下RN跨平台开发技术,简单的介绍一下,可是网上关于RN的技术博客很多,语言描述性的缺很少,让初学者没有一个很好的概念去全面的了解RN,所以呢我就大概总结了一下RN跨平台移动应用开发框架的介绍。

上个月我们报导过 Airbnb 决定弃用 React
Native 的消息,一瞬间仿佛
RN 变成了危险、不可靠的角色,而最近在 Udacity 的 Media
博客中,Udacity
的移动团队也宣布其已经删除了应用中使用 React Native 编写的所有功能。

引用英文来自:译文来自:当我在面试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应用共享了store和action的98%的代码。性能React
Native在后台线程运行JavaScript并发送极小的代码到主线程中。事实证明,React
Native相比于Objective-C或Swift编写的原生iOS应用来说有一些性能差异!引用Reactiflux小组的性能演示,该组有超过1.1万个会员
——
UI和JS线程大多数都是60FPS然而,我们当初开始构建iOS应用时发现聊天滚动视图的性能并不令人满意,尤其是一些活跃的聊天分组。于是,我们决定使用ComponentKit构建聊天视图并编写必要的桥接代码代替原有的方案。当JS线程在完成一些繁重任务的时候,类库也无法提供原生那样流畅的动画,因此我们在抽屉侧滑动画上继续使用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还不太成熟,资源有限,也不完整。但随着它越来越流行,在不久之后一定能赶上其他成熟的技术。下面列出了一些实用的资源,我也经常在它的仓库上提问和获取最新的信息:Reactiflux上的#react-native。js.coach—React
Native开源组件列表。awesome-react-native—大量的React
Native文章、教程和示例。引用译注:中文资源:React
Native学习指南总的来说,React
Native很有潜力,它把我们团队的移动应用开发带上了一个新的台阶。像我这样原生的iOS开发者可以平滑地过渡到React
Native,这有些出乎我的意料。同时,它也帮助我扩展职业技能,因为我也可以很轻松地向React编写的Web应用贡献代码了。

前言

随着科技的发展,Android与iOS量大操作系统已经称霸江湖(这种稳定对开发者是一件好事,相互竞争也让两大操作系统都在不断的提升完善)。手机硬件配置越来越强大,能力越来越强大,价格越来越平易近人。手机现在已经成为了普通老百姓无时无刻不随身携带的电脑。伴随着这种趋势,市场对移动应用的需求也越来越多,而且要求越来越高。。

这么多年来,移动开发应用开发者做梦都希望有一个能跨平台的开发工具,让他们不要把同一个移动应用使用不同的开发语言写两遍。但是跨平台开发工具的实现很难,很多先驱者倒在了这条路上。直到Facebook给大家带来了React
Native。

澳门新葡亰网址下载 2

澳门新葡亰网址下载,简介

2015年3月26日,Facebook公司对外正式发布了React Native —
使用React框架跨平台开发原生移动应用的开源技术框架。开发者可以使用React
Native 高效开发Android和iOS操作系统的应用程序。
它的设计理念是:使用React
Native开发,即拥有Native的良好人机交互体验,又保留了React框架的开发效率。
(Native是指使用原生开发环境开发的应用程序。Native的良好人机交互体验是指当用户手指在屏幕上操作时,被触摸的UI组件会发生视觉上的变化)
(而React是Facebook从2012年以来慢慢发展起来的一套开发框架,在这套框架上诞生了React.js用来进行网页开发,以及React
Native用来进行APP开发。《React、React.js、React
native三者的关系后面具体来看》)

文章回顾了 Udacity 移动工程团队使用 React Native
的经历,包括团队与应用情况、为什么使用 RN、最后又为什么放弃 RN
等。作者表示虽然 React Native
有许多优势,但是他们在开发过程中也遇到了不少困难,包括
UI/UX、性能、向后兼容性与后期维护等问题,这些问题最终导致了开发团队决定放弃使用
React Native,在尝试了 18 个月、做出 4 个功能之后完全将其代码删除。

特点

  1. 一次学习,随处编写

    React Native提出“Learn once, write anywhere”。使用React
    Native可为Android和iOS两个操作系统开发应用程序,但不同平台上的代码根据平台会有细小区别,但开发思路是相同的。

  2. 混合开发

    React Native允许开发者在React Native擅长的领域使用React
    Native开发,而在React
    Native不能实现的领域或者已经有原生代码实现好的领域直接使用原生代码。React
    Native 代码开发模块与原生代码开发的模块可以双向通信、无缝衔接。

    • 混合开发情况3种:
      • UI界面由React Native开发,但UI事件处理由原生代码执行。
        • 比如登录功能,React
          Native开发包含用户名、密码输入以及登录按钮控件的界面,用户输入相关信息,点击登录按钮后,React
          Native组件将用户名和密码传给原生代码编写的登录模块(Android:java开发,iOS:Object-C或Swift开发),让原生代码执行登录操作。原生代码向服务器发送登录请求,并等待回应。在服务器回应后,原生代码将受到的回应中的登录成功与否,以及其它的一些需要向UI展示的数据传递给React
          Native组件,React
          Native接收并解析这些数据,执行UI更新,向用户展示。
      • 将原生使用原生代码实现的UI小部件包装成React
        Native的自定义组件

        • React
          Native支持将Widget(官方、第三方开源、开发者自行开发)包装成React
          Native的自定义组件,然后在React Native代码中方便的使用。
      • 应用界面在React Native开发的界面与原生代码开发的界面间切换
        • 在已用原生代码开发好的项目中加入一些用React Native
          开发的新界面,混合开可以做到让应用界面流畅自如地在这两种界面间切换,用户对此不会有任何的感知。
  3. 高效的UI开发

使用React
Native开发移动应用的UI界面比使用原生语言快捷高效,再考虑到至少90%的移动界面都可以使用React
Native开发,一分代码适配android和iOS两个平台,这相当于减掉了一个开发平台上至少50%的工作量。

React Native可以实现很多UI之外的功能,但开发UI部分绝对是React Native的强项,这体现在如下四个方面:
  • 独特的UI实现框架

    • 复杂UI界面开发难点的本质问题就是:如何将来自网络侧与用户侧的动态数据高效、实时、正确地呈现在复杂的用户界面上。
      FaceBook的React框架是这个问题的一个优秀解决方案。React
      Native官网描述它的出发点为:用于开发数据不断变化的大型应用程序。相比传统的UI开发,React开辟了一个相当另类的途径,实现了UI界面的高效率、高性能开发。使用React开发,开发者永远只需要关心数据。当数据改变时,开发者只需要告诉React数据变了,有React来实现UI界面的改变。
  • 组件化开发

    • React
      推荐已组件的方式去重新思考UI构成,将UI上每个功能相对独立的模块定义成组件,然后将小的组件通过组合或者嵌套的方式构成大的组件,最终完成整体的UI的构建。

    React强调将应用划分成多个互不相关的组件,每个组件作为独立的视图。这使得开发者更容易进行软件迭代升级,因为不用在改动某一小部分时把整个系统都梳理一遍。最重要的的是,React包装了复杂而易变的数据到对象的实现,改为提供一个声明式的结构,使得整个程序模型变得抽象而简单。使用React来构建网页或者手机UI时,代码变的更容易预测。这种可预测性使得开发者在快速迭代产品时可以更多地信任已有的代码,最终应用程序也变得更为可靠。更进一步的,React框架不仅仅使扩大应用规模变得容易,也使得团队规模更容易进行调整。
    这样开发出来的代码结构清晰、公用性高、可移植性高。上一个项目的某些组件,可以很方便的拿来在下一个项目中使用;好的开源组件,可以下载后很方便地集成在我们的项目中使用。

  • 跨平台移植代码迅速

    • 使用React

      Native进行UI开发时,开发者通常在一个平台上开发,然后用这一套代码去另一个操作系统中进行修正。通常需要修正的代码只有总代码的5%甚至更低。

  • 自动匹配不同屏幕大小的手机

    • 使用React
      Native开发,开发者无须为不同屏幕分辨率准备不同的图片资源或者布局文件,甚至可以不考虑屏幕大小的问题。通过灵活的布局方式,React
      Native可以做到在不同的手机屏幕上高效、清晰的UI呈现。
  1. 高效的UI调试

使用React
Native开发,修改了代码后立刻可以在手机上看到效果,没有重新编译启动程序所需要的时间。并且可以打开一个Chrome窗口,所有的代码都移植到Chrome里面运行,断点调试、单步调试、调用栈追踪这些常用的调试方法都可以进行操作。

  1. 学习门槛低、开发难度低
    • 开发语言简单
      • React Native使用ECMAScript 2015语言(简称ES
        6)以及自创的JSX(JavaScript中加入标签化的XML)来进行开发。对于没有JavaScript知识背景的移动开发人员,只需要花时间熟悉JavaScript的基本语法后就可以使用React
        Native进行开发。
    • 语法接近自然语言
      • React
        Native开发中的函数名、变量名都采用类似于自然语言的命名法,便于记忆。这种代码语句的基本含义基本可以直接推断和理解。
    • 积木式UI开发
      • 使用React
        Native开发时,是一种类似于搭积木的方式。不论是设计还是实现,通过React
        Native框架都能做到逻辑结构清晰、开发难度低、可读性高、后期维护方便。
  2. 开发软硬件要求低

使用ReactNative开发对软硬件要求低,RN开发用的软件都是可免费下载、安装使用的正版软件,部分是开源软件。

  1. 使用React Native开发的代价
    • 内存消耗略大
      • 使用React Native
        开发的程序运行所需内存比原生代码开发的程序略多。
    • 运行速度
      • 使用React Native开发的代码的运行速度比原生代码略慢。
    • 安装包比原生代码安装包大
      • 使用React
        Native开发的程序体积比原生代码大。无论是安装包的大小,还是安装后需要的空间都比原生代码编写的程序大。

8.使用RN开发的优点

  • 1、组件化开发,复用率高,组件丰富以后,UI开发较快,前端式开发。
  • 2、同时支持Android和iOS的UI界面。
  • 3、可以方便的进行代码热更新。
  • 4、Learn once,write
    anywhere,未来js可能会有更大的通用性,比如现在微信小程序的开发技术和React
    Native十分相似。现在还有用React Native开发mac桌面应用,开发web网页。
  • 5、可以和原生页面互相调用,作为一部分嵌入到一个已有的原生app中。它是一种介于在webview和原生开发之间的解决方案,它想要实现像web一样灵活,像原生一样的性能,虽然现在还都没有达到,但是它是一种有可能接近这个目标的解决方案。

9.使用RN开发的缺点

  • 1、由于还不是稳定版本,版本更新太快,大概两周会有一个新的版本。更新新
    版可能会出现不兼容的问题,有时候需要手动解决。
  • 2、支持的组件不全面。大部分厂商并不支持react
    native。一些支持的现在一般也处在不稳定版本。比如截止到rn版本0.42,js版的本地数据库组件只有realm支持,现在realm版本为3.1.0。相比较realm数据库现在是越来越稳定了。
  • 3、程序的性能。现在普遍都说比原生的性能要差,但是差多少没有一个具体的衡量。直观的感觉是复杂的页面在一些配置较低的手机上会有肉眼可见卡顿的感觉。
  • 4、虽然大多界面可以同时生成ios和android的,但一些涉及到底层的东西需要在ios和android单独开发,然后在js层进行调用。
  • 5、关于react native的开发现在并没有一些best
    practice,也没有真正很有经验的人,很多只能摸索。对于小团队来说,试错成本有点高,一旦卡在一些问题上,网上解决方案很少,容易耽误了整体的进度。

关于RN的概念就说这么多了,我想你看完之后一定会对React
Native有一个更好的认识了,接下来我会根据我自己学习RN之路的收获和遇到的困难来写更多的博客。
如果你想了解更多欢迎加入我们一起学React Native
群点击链接加入群【我们一起学React
Native】
来一起学习吧

作者还表示,删除的功能并没有使用替代方案重新开发,团队决定不再维护这几个功能。而至于将来会不会再用到
React Native,他表示 iOS 和 Android 团队有不同的考量,iOS
方面将来还是有可能使用 RN,但是 Android
上将不会再使用,它的体验和组件集成等问题过于严重。

尽管如此,作者还是对 React Native
大加赞赏,他认为其确实有适用的场合,无论是需要在两个平台上快速从头开始构建新应用,还是希望不管平台如何,应用的外观/行为都相同,这些情况下使用
React Native 都是不错的选择。特别是如果开发者有 Javascript/React
背景,并且正在准备构建一个不需要太多本机代码的应用程序,那么 React
Native 将会是一个非常好的选择,它可以使得开发者不用去学习 iOS 与 Android
这两种不同的技术栈。作者希望开发者在评估 React Native
运用于他们项目的可行性时,自己团队的这些经验能够给到帮助。

React Native 最近是怎么了?快留言发表你的看法。

(文/开源中国)    

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图