V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
banxi1988
V2EX  ›  移动开发

Airbnb: React Native 从选择到放弃

  •  2
     
  •   banxi1988 · 2018-06-20 22:43:51 +08:00 · 10875 次点击
    这是一个创建于 2378 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Airbnb 最近在 Medium 上发了一系列文章详细描述了 Airbnb 与 React Native 从选择到放弃的整个心路历程。

    1. React Native at Airbnb
    2. The Technology
    3. Building a Cross-Platform Mobile Team
    4. Making a Decision on React Native
    5. What's Next for Mobile

    对于字多不看的同学,可以简单看一下我下面的小结。

    当初为什么选择 React Native

    有限的开发团队满足不了日益增长的业务需求

    对 React Native 的期望

    1. 快速开发
    2. 质量有保证
    3. 一次编写,多平台共享
    4. 提升开发体验

    我们所怀念的

    1. 跨平台,实际上有 95% 以上的共享代码率。
    2. 统一的 DSL。根据平台也做具体的差异化实现。
    3. React 是个好东西。组件化简单的生命周期,声明式
    4. 开发迭代速度(热更新 hot-reloading
    5. 我们在基础设施上的投资。
    6. 性能,在绝大部分页面上 RN 都表现得很流畅。(有性能问题? shouldComponentUpdate, removeClippedSubviews, Redux 了解一下。)
    7. Redux 是个好东西。也是个好冗长的东西。
    8. 与 Native 的桥接,可以方便的封装已有的 Native 库。
    9. 静态分析,从 ESLintprettier
    10. RN 的动画库不错。
    11. JS/React 的开源生态。
    12. Flexbox
    13. 与 Web 平台共享代码。

    让我们沮丧的

    1. 论成熟度,稳定性,RN 比 不上 iOS 和 Android 原生。
    2. 由于 RN 的 Bug,有时我们必须维护自己的一个 RN 分支
    3. JS 缺少类型系统,Flow 太严格,TS 集成到已有项目也还有问题。
    4. 重构,重构是不可能重构的,又没有类型系统,只能挣扎着做静态分析。
    5. JavaScriptCore 不一致性,更糟糕的是,现在都 8102 年了,RN ( Android )带的还是不支持 ES 6 的 JSC
    6. RN 开源库质量参差不齐。比如在 iOS 上正常的库在 Android 上可能有意想不到的错误(因为为作者也许只熟悉 iOS 和 RN,并不熟悉 Android )
    7. 有时不得不白手起家,因为很多的基础框架中的库还没有 的 RN 封装。
    8. 崩溃监控库在 RN 上表现不是特别特定,而且在 RN + Native 错误栈的跳转要不要挑战一下?
    9. Native Bridge 的由于 JS 的弱类型造成 Native 与 JS 通信 中类型的不匹配,容易生成错误。(后悔没早点用 TS 生成通信代码。)
    10. 启动时间,RN 框架初始化需要几秒,即使是在高端机器上。
    11. 新开页面的渲染时间,0.4 秒左右页面第一次渲染费时。
    12. APP 大小。至少增加 12M。
    13. 直到目前都无法在 Android 上支持 64 位
    14. 手势,iOS 和 Android 的手势 API 差距很大,不过喜闻react-native-gesture-handler 发布了 1.0 版本。
    15. 长列表,虽然 RN 团队很努力了,但是由于 RN 的异步通信机制,长列表的流畅渲染,目前依然无解。
    16. React Native 升级是个坑。
    17. RN 中的 Accessibility 就是个大坑。
    18. 还有一些奇怪的 Bug,暂没有修复。
    19. SavedInstanceState 在 Android 上跨进程的

    不是技术问题的问题

    1. 要用好 RN 你必须同时熟悉 iOS 和 Android,当然还有 RN 本身,这就对我们工程师提出了更多挑战。
    2. 团队的管理,责任的划分。
    3. RN 文档及相关资源不如 iOS 和 Android 的丰富。
    17 条回复    2018-06-26 10:40:33 +08:00
    shibo501c
        1
    shibo501c  
       2018-06-20 23:24:07 +08:00
    最近刚好在用 React Native,多谢分享
    jimliang
        2
    jimliang  
       2018-06-20 23:33:07 +08:00
    airbnb.com 也是 React 写的,看起来很美观,其实实现很糟糕,光是一个房间页返回的 html 就几百 kb 了,应该用了 ssr,但包含了大量无用的数据,右键查看源码就知道了。总体来说,水平也就那样。
    tyrealgray
        3
    tyrealgray  
       2018-06-20 23:58:46 +08:00 via Android
    看来要说技术还是腾讯最牛逼了,安卓版就是 RN 的,虽然也不好用,但是一点都没感觉到可能是 RN 写的🙃
    qixinghaitang
        4
    qixinghaitang  
       2018-06-21 00:08:48 +08:00
    感谢分享,能够付稿费给你,投稿到我服务号嘛,哈哈哈
    ctsed
        5
    ctsed  
       2018-06-21 00:28:51 +08:00
    @tyrealgray #3 qq 吗
    rogwan
        6
    rogwan  
       2018-06-21 00:35:07 +08:00 via iPhone   ❤️ 1
    一次编写,到处运行终是梦,
    一次运行,各种填坑才是真。
    orangeade
        7
    orangeade  
       2018-06-21 01:28:41 +08:00 via Android
    所以京东换成 RN 之后真烂
    ericls
        8
    ericls  
       2018-06-21 01:30:59 +08:00 via iPhone
    Airbnb 给 React Native 真的做了不少贡献

    而且 Airbnb 的 ticket/pr 响应非常快 不像 Facebook
    fuermosi777
        9
    fuermosi777  
       2018-06-21 04:37:51 +08:00
    大公司的需求太高太复杂,什么都需要定制。我自己的好几个 app 用 RN 基本上都做到了一次编写两处发布,很省时间,用原生是不可能做到的。
    tyrealgray
        10
    tyrealgray  
       2018-06-21 06:07:26 +08:00
    @ctsed 是的
    banxi1988
        11
    banxi1988  
    OP
       2018-06-21 07:21:04 +08:00
    @qixinghaitang 可以,不过有错别字可能需要修改一下。
    比如 *容易生成错误* -> *容易造成错误*
    newbieo0O
        12
    newbieo0O  
       2018-06-21 09:07:01 +08:00
    @fuermosi777 发来看看。
    qixinghaitang
        13
    qixinghaitang  
       2018-06-21 09:42:17 +08:00
    @banxi1988 加下微信呗,嘿嘿
    tongzifang
        14
    tongzifang  
       2018-06-21 10:07:14 +08:00 via Android
    @tyrealgray 安卓版 QQ 是 RN ?
    momocraft
        15
    momocraft  
       2018-06-21 10:25:57 +08:00
    8 的跨 js bridge 的异常栈:听说 RN 团队在重构改善
    nicevar
        16
    nicevar  
       2018-06-21 10:40:37 +08:00
    @tongzifang 只是部分用到,以前企鹅的人在开发大会上提到过,不知道现在范围扩大了多少,其实很多公司的 app 都混用 RN 的,业务逻辑复杂全用 RN 开发只能是卡得要命,小公司真不推荐用,没有大公司的技术实力,那些坑根本没法填
    tolerious
        17
    tolerious  
       2018-06-26 10:40:33 +08:00
    有人试过 NativeScript 没有?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5655 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 03:35 · PVG 11:35 · LAX 19:35 · JFK 22:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.