Производительность флаттера - SetState против StreamBuilder

Что во Flutter имеет большую производительность по сравнению с обработкой больших нагрузок?

Допустим, мы слушаем поток, который выдает около 1000 сообщений в секунду. Какой способ будет больше производительности?

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 ответа

Решение

Согласно документации по флаттеру:

Когда setState() вызывается для состояния, все дочерние виджеты перестраиваются. Поэтому локализуйте вызов setState() для той части поддерева, пользовательский интерфейс которой действительно необходимо изменить. Избегайте вызова setState() высоко в дереве, если изменение касается небольшой части дерева.

Поэтому в вашем конкретном случае у вас может не быть разницы в производительности, однако в больших деревьях виджетов StreamBuilder изолирует ваш виджет, избегая перестроения во всем дереве.

Я также рекомендую вам проверить конкретный сценарий на "Странице инспектора виджетов DevTools". Он предоставит вам анализ в реальном времени, включая время графического процессора, потребление памяти, производительность и многое другое.

Оба идентичны (с учетом того, что StreamBuilder делает это в другом Widget).

Начать с, StreamBuilder внутри делает то же самое setState вызов.

Другие вопросы по тегам