performance - StreamBuilder 更新的性能(一个与多个)

标签 performance flutter dart stream-builder

用多个 child 更新单个父部件之间的性能差异是什么 与自行更新每个子项相比。

哪个性能更好,性能如何:

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,会发生什么情况?性能有变化吗?

最佳答案

同一 Stream(或任何其他状态)有更多的监听器会降低性能。 添加监听器时检查这个基准

值(value)通知基准:https://github.com/knaeckeKami/changenotifier_benchmark

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

拥有一个只有一个 Listener 的昂贵小部件列表也会降低性能(当它们都得到重建时)。

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

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

这种情况的解决方案是使用 ProviderScope 形式的 Riverpod ,它可以用于覆盖特定小部件的另一个提供者或使用 .select 方法。

关于performance - StreamBuilder 更新的性能(一个与多个),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61964162/

相关文章:

dart - flutter - 异步函数总是返回 null,而它不是 null

android - Flutter AlertDialog Navigator 弹出黑屏问题

flutter dio 上传文件 [pdf/docs]

java - 搜索性能调整

performance - 为什么从 Azure blob 下载需要这么长时间?

dart - 如何将对象列表添加到 Firestore?

javascript - 从 Dart 调用 js

javascript - 动态/自动 Javascript 和 CSS 组合和缩小

html - 使用可重复使用的样式以方便使用,但最适合网站速度?

dart - FutureBuilder 与 setState 的结合使用