Flutter性能-SetState与StreamBuilder

时间:2020-02-13 14:25:12

标签: flutter

在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)
                  );
                }
              },
            )),

2 个答案:

答案 0 :(得分:3)

根据flutter文档:

在State上调用setState()时,所有后代小部件将 重建。因此,将setState()调用本地化到 实际上需要更改其UI的子树。避免调用setState() 如果更改只包含在树的一小部分中,则位于树的高处 树。

因此,在您的特定情况下,您可能没有性能差异,但是在大型窗口小部件树中,StreamBuilder将隔离您的窗口小部件,从而避免在整个树中进行重建。

我还建议您使用“ DevTools窗口小部件检查器页面”检查特定的情况。它将为您提供实时分析,包括GPU时间,内存消耗,性能等等。

答案 1 :(得分:2)

两者都是相同的(以StreamBuilder在不同的Widget中做到这一点为模)。

首先,StreamBuilder在内部执行相同的setState调用。