Airbnb: React Native 从选择到放弃 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
banxi1988
V2EX    移动开发

Airbnb: React Native 从选择到放弃

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

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

    1. React Nativeat 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     Solana     5443 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 07:30 PVG 15:30 LAX 00:30 JFK 03:30
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86