Flutter 性能 - SetState 与 StreamBuilder

Kav*_*ody 4 flutter

在 Flutter 中,哪种方式比高负载处理性能更好?

假设我们正在监听一个每秒发出大约 1000 条消息的流。哪种方式会有更好的性能?

1) 使用 setState() 类似

stream.listen((msg) => setState(() => _msg = msg)
Run Code Online (Sandbox Code Playgroud)

然后在构建方法中

return Text(_msg);
Run Code Online (Sandbox Code Playgroud)

2)使用流生成器

StreamBuilder(
              stream: stream,
              builder: (context, snapshot) {
                if (snapshot.hasData) {
                  return Text(snapshot.data)
                  );
                }
              },
            )),
Run Code Online (Sandbox Code Playgroud)

Cas*_*rin 5

根据颤振文档:

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

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

我还建议您使用“DevTools Widget Inspector Page”检查特定场景。它将为您提供实时分析,包括 GPU 时间、内存消耗、性能等等。

  • 很高兴知道它帮助了@KavindaJayakody。你不会后悔用DevTools检查性能,这是值得的,性能永远不能忽视! (2认同)