Airbnb: React Native 从选择到放弃
Airbnb 最近在 Medium 上发布了一系列文章详细描述了 Airbnb 与 React Native 从选择到放弃的整个心路历程。
- React Native at Airbnb
- The Technology
- Building a Cross-Platform Mobile Team
- Making a Decision on React Native
- What's Next for Mobile
对于字多不看的同学,可以简单看一下我下面的小结。
当初为什么选择 React Native
有限的开发团队满足不了日益增长的业务需求
对 React Native 的期望
- 快速开发
- 质量有保证
- 一次编写,多平台共享
- 提升开发体验
我们所怀念的
- 跨平台,实际上有 95% 以上的共享代码率。
- 统一的 DSL。根据平台也做具体的差异化实现。
- React 是个好东西。组件化,简单的生命周期,声明式
- 开发迭代速度(热更新 hot-reloading)
- 我们在 RN 生态基础设施上的投资。
- 性能,在绝大部分页面上 RN 都表现得很流畅。(有性能问题? shouldComponentUpdate, removeClippedSubviews, Redux 了解一下。)
- Redux 是个好东西。也是个好冗长的东西。
- 与 Native 的桥接,可以方便的封装已有的 Native 库。
- 静态分析,从 ESLint 到 prettier
- RN 的动画库不错。
- JS/React 的开源生态。
- Flexbox
- 与 Web 平台共享代码。
让我们沮丧的
- 论成熟度,稳定性,RN 比 不上iOS 和 Android 原生。
- 由于 RN 的 Bug,有时我们必须维护自己的一个 RN 分支。
- JS缺少类型系统,Flow 太严格,TS 集成到已有项目也还有问题。
- 重构,重构是不可能重构的,又没有类型系统,只能挣扎着做静态分析。
- JavaScriptCore 不一致性,更糟糕的是,现在都 8102年了,RN (Android)带的还是不支持 ES 6 的 JSC
- RN 开源库质量参差不齐。比如在 iOS 上正常的库在 Android 上可能有意想不到的错误(因为为作者也许只熟悉 iOS 和 RN,并不熟悉 Android)
- 有时不得不白手起家,因为很多的基础框架中的库还没有 的RN 封装。
- 崩溃监控库在 RN 上表现不是特别特定,而且在 RN + Native 错误栈的跳转要不要挑战一下?
- Native Bridge 的由于 JS 的弱类型造成Native 与 JS通信 中类型的不匹配,容易造成错误。(后悔没早点用 TS 生成通信代码。)
- 启动时间,RN框架初始化需要几秒,即使是在高端机器上。
- 新开页面的渲染时间,0.4秒左右页面第一次渲染费时。
- APP 大小。至少增加 12M。
- 直到目前都无法在 Android 上支持 64位。
- 手势,iOS 和 Android 的手势 API 差距很大,不过喜闻react-native-gesture-handler 发布了 1.0 版本。
- 长列表,虽然 RN 团队很努力了,但是由于 RN 的异步通信机制,长列表的流畅渲染,目前依然无解。
- React Native 升级是个坑。
- RN 中的 Accessibility就是个大坑。
- 还有一些奇怪的 Bug,暂没有修复。
-
SavedInstanceState
在 Android 上跨进程的坑。
不是技术问题的问题
- 要用好 RN 你必须同时熟悉 iOS 和 Android ,当然还有 RN 本身,这就对我们工程师提出了更多挑战。
- 团队的管理,责任的划分。
- RN 文档及相关资源不如 iOS 和 Android 的丰富。
作者:banxi
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
插件化框架DL源码的简单解析
目前行业内已经有较多的插件化实现方案。本文主要对DL(DynamicLoadApk)这一个开源的侵入式插件化方案进行简单分析。因为Service组件插件化的实现逻辑和Activity大体相似,所以在这里主要用Activity来分析。 基本介绍 基本概念 1、宿主:主App,可以加载插件.2、插件:插件App.被宿主App加载的App.3、组件:对于Android来说,指的就是Android中的四大组件(Activity、Service、BroadcastReceiver、ContentProvider) 基本使用 1、PluginActivity public class MainActivity extends DLBasePluginActivity { @Override public void onCreate(Bu
- 下一篇
Android 基础动画之帧动画详解
在上一篇 Android 基础动画之补间动画详解 主要介绍了补间动画的基本属性以及补间动画在Android起始设计之初带来的一些问题。本篇文章主要介绍的是Android的帧动画。 帧动画,我们从字面意思来理解,帧:就是影像动画中最小单位的单幅影像画面,相当于电影胶片上的每一格镜头。 一帧就是一副静止的画面,连续的帧就形成动画,如电视图象等。简单点说就是类似幻灯片播放的那种效果,因此帧动画的本质就是将一张张的图片,通过代码对这些图片进行连续的活动(这样就形成了动画) 假设现在有这样一个效果如图,这个动画就类似手机WIFI连接信号,从一格到满格 效果图 那么,使用帧动画的方式该如何实现该效果? xml方式实现 文件名:anim_list.xml (文件存放路径: main/res/drawable) anim_list.xml <?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:on...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Linux系统CentOS6、CentOS7手动修改IP地址
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS关闭SELinux安全模块
- Docker安装Oracle12C,快速搭建Oracle学习环境