gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 16:39:41 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com