在Flutter中,哪种方式在处理高负载时性能更高?
比方说,我们正在侦听每秒发出约1000 msgs的流。哪种方法会有更高的性能?
1)像使用setState()
stream.listen((msg) => setState(() => _msg = msg)
然后使用构建方法
return Text(_msg);
2)使用流生成器
StreamBuilder(
stream: stream,
builder: (context, snapshot) {
if (snapshot.hasData) {
return Text(snapshot.data)
);
}
},
)),
答案 0 :(得分:3)
根据flutter文档:
在State上调用setState()时,所有后代小部件将 重建。因此,将setState()调用本地化到 实际上需要更改其UI的子树。避免调用setState() 如果更改只包含在树的一小部分中,则位于树的高处 树。
因此,在您的特定情况下,您可能没有性能差异,但是在大型窗口小部件树中,StreamBuilder将隔离您的窗口小部件,从而避免在整个树中进行重建。
我还建议您使用“ DevTools窗口小部件检查器页面”检查特定的情况。它将为您提供实时分析,包括GPU时间,内存消耗,性能等等。
答案 1 :(得分:2)
两者都是相同的(以StreamBuilder
在不同的Widget
中做到这一点为模)。
首先,StreamBuilder
在内部执行相同的setState
调用。