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

flutter 是直接把代码转换为原生,那为什么这么多年 react-native 不学习这个优点?

  •  
  •   user667788 · 2023-03-26 12:20:05 +08:00 · 4836 次点击
    这是一个创建于 395 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我看了很多评测、文章,都说 flutter 性能更好

    我就觉得很好奇, 为什么这么多年,react-native 不把这个优点学习过来呢

    还是说,rn 团队没有这么大的动力去做这个改造?

    谢谢

    18 条回复    2023-03-27 10:28:05 +08:00
    Trello
        1
    Trello  
       2023-03-26 12:29:26 +08:00   ❤️ 2
    就 flutter 那鹅心人的嵌套写法,我就用不下去。
    WebKit
        2
    WebKit  
       2023-03-26 12:49:09 +08:00 via Android
    Flutter 不是把代码转原生,而是自己实现了一套 UI 组件的绘制渲染。
    cornetCat
        3
    cornetCat  
       2023-03-26 13:08:56 +08:00
    某种意义上 RN 比 flutter 更偏向你说的内容啊...
    flutter 就是一个画布...
    okakuyang
        4
    okakuyang  
       2023-03-26 13:32:50 +08:00   ❤️ 6
    两个东西。

    react-native 的生态有一半是建立在 react 上的。
    react 要用 js 运行时来执行,react-native 要操作真实原生 UI 控件。
    优势也是在这里。
    因为它是原生控件,如果系统 UI 框架更新了,react-native 可以很方便的利用这些改进。

    相对的 flutter 的性能是因为它不需要一个 js 运行时来处理虚拟 dom 。
    他这部分也是原生实现的,但是它并没有操控原生 UI 控件。
    它是自己完成了触控逻辑处理,UI 排版绘制这些工作。
    这就有了下面的问题。

    它不会因为原生 UI 控件的改变,导致自己绘制出错。
    相对的,它无法利用原生 UI 控件的新增功能。
    它所有的新增功能都需要 flutter 生态自己提供。
    hornorForGod
        5
    hornorForGod  
       2023-03-26 16:24:54 +08:00 via Android
    flutter 是自绘类似 qt,gdi 。react 是把代码转义成目标系统控件。
    stabc
        6
    stabc  
       2023-03-26 18:09:02 +08:00
    无脑 Flutter 吧,RN 那个新框架我测试过性能,渲染几百个 View 就开始拉夸
    XCFOX
        7
    XCFOX  
       2023-03-26 18:30:50 +08:00
    Flutter 真的性能更好吗?

    基于 Flutter 的《哔哩哔哩漫画》在翻页和滚动时会有明显卡顿,这个问题是普遍存在的( https://github.com/flutter/flutter/projects/188)。
    另外一个基于 Flutter 的《彩云小梦》甚至连高帧率都没适配,可以说是我手机上是最卡的 APP 。

    Flutter 团队为此不得不抛弃 Skia 自制一个渲染引擎 Impeller( https://github.com/flutter/flutter/wiki/Impeller)。

    反而 RN 使用原生组件在动画渲染上是没有太大问题的。
    IvanLi127
        8
    IvanLi127  
       2023-03-26 19:54:23 +08:00 via Android
    我以前用的时候,一直不能理解为啥 flutter 在滚动上丢帧特别严重,我每次写都在怀疑是不是我做错什么了。。。

    性能好到底是何啥比的。。。。
    churchill
        9
    churchill  
       2023-03-26 20:11:08 +08:00
    flutter 的原生能力是 dart 的 AOT 提供的,react-native 要想做必须先要实现一个有 AOT 能力的 JS 引擎,考虑到现有生态的兼容性,这可能是个很难完成的任务。
    lxiian
        10
    lxiian  
       2023-03-26 20:15:04 +08:00 via iPhone
    flutter 之前 skia 在 ios 上表现一般,掉帧严重,在 android 上还好。 不过听说换引擎了,好久没用 flutter 了,不知道现在怎么样了
    gogozs
        11
    gogozs  
       2023-03-26 20:16:49 +08:00
    你先搜索一下,编译型和解释型语言的区别
    zqlcrow
        12
    zqlcrow  
       2023-03-26 23:51:35 +08:00
    说反了吧。

    react-native 才是,原生代码实现。
    所以你可以想一想,有多恐怖。
    写的代码,层层处理,最终到原生。


    flutter 才是不原生实现,自己绘制,所以解决了性能问题。


    从本贴的回复可知,许多人根本连基础都没了解过,就开始指点江山了。
    这甚至是,官网入门基础介绍的最前面的内容之一......
    HugoChao
        13
    HugoChao  
       2023-03-27 00:14:57 +08:00
    RN 写的的 discord 很流畅
    DOLLOR
        14
    DOLLOR  
       2023-03-27 00:39:56 +08:00
    flutter 真没宣传中的那么美好,看上面大家的说法,看来不只我一个觉得 flutter 应用卡顿。
    或许这种跨平台应用,本来就不该指望“性能”吧。
    meteor957
        15
    meteor957  
       2023-03-27 00:45:24 +08:00 via Android
    无脑 RN
    stabc
        16
    stabc  
       2023-03-27 01:32:56 +08:00
    Discord 的整个框架是 RN 的,但核心聊天视图一直是调用原生组件,这也是它流畅的原因。即使是用户列表之类的简单列表,RN 也遇到严重性能问题,导致 Discord 成立了一个专门的”性能提升小组“来处理这个问题。
    vivipure
        17
    vivipure  
       2023-03-27 09:07:24 +08:00
    热更新功能还是刚需
    dreamramon
        18
    dreamramon  
       2023-03-27 10:28:05 +08:00
    无脑 rn ,flutter 就算了吧,小团队没空成本搞那么多性能的的 workround 去 压榨性能。
    rn 可以热更,可以快速迭代业务,性能可以压榨,但是初始版本就不算差,再配合边缘计算。
    延迟=处理+网络来回+渲染
    基于 js 的生态,边缘计算直接把处理和网络搞定,开箱可用。
    flutter ,至少还不到开箱可用吧。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5400 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 06:57 · PVG 14:57 · LAX 23:57 · JFK 02:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.