用多个 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/