Производительность флаттера - 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
вызов.