【问题标题】:StreamBuilder updates' performance (One vs Multiple)StreamBuilder 更新性能(一个 vs 多个)
【发布时间】:2020-09-09 20:00:34
【问题描述】:

更新具有多个子级的单个父级小部件之间的性能差异是什么 而不是自己更新每个孩子。

哪个性能更高,性能更高:

StreamBuilder(
  stream:sameStream,
  builder(ctx,snapshot){
    return Column(
      children:[
       Text("1"),
       Text("2"),
       Text("3")
      ]
    ) 
  }
)

或者

Column(
  children:[
    StreamBuilder(
      stream:sameStream,
      builder(ctx,snapshot){
        return  Text("1"):
      }
    ),
    StreamBuilder(
      stream:sameStream,
      builder(ctx,snapshot){
        return  Text("2"):
      }
    ),
    StreamBuilder(
      stream:sameStream,
      builder(ctx,snapshot){
        return  Text("3"):
      }
    )
  ]
)

另一个问题:如果我们将子小部件缩放到 100 会发生什么?性能有变化吗?

【问题讨论】:

    标签: performance flutter dart stream-builder


    【解决方案1】:

    对相同的Stream(或任何其他状态)有更多的侦听器会降低性能。 添加侦听器时检查此基准

    值通知器基准:https://github.com/knaeckeKami/changenotifier_benchmark

    ChangeNotifier 基准测试:https://github.com/flutter/flutter/pull/62330

    只有一个侦听器的昂贵小部件列表也会降低性能(当它们全部重建时)。

    无论如何,如果您将同一个 Stream 与多个孩子一起使用,您应该只使用一个 Listener,因为当状态改变时,无论它们是在同一个 Listener 上还是其中任何一个有一个 Listener,它们都将获得重建调用,但在第二种情况,当状态改变时,Stream 必须做更多的工作来通知它拥有的每个 Listener。

    我遇到了你的问题,它发生在你有一个(状态)列表时,是的,如果你有一个监听器,当状态改变时通知会更快,但重建所有孩子可能会很广泛他们没有任何更新。

    这种情况的解决方案是使用ScopedProvider 形式Riverpod,它可以与Stream 或其他状态一起使用,例如StateNotifierChangeNotifier ...等。

    【讨论】:

      猜你喜欢
      • 2011-09-21
      • 1970-01-01
      • 2020-03-03
      • 2011-10-06
      • 2021-07-26
      • 2011-06-12
      • 1970-01-01
      • 2011-11-25
      • 2016-10-08
      相关资源
      最近更新 更多