😺
【Flutter】非同期処理のループ処理 (for文 or map)
非同期処理について
Flutterの画面描写にて表示が遅いなってものがありました。
色々考えていた時にfor文だから遅いんじゃないかな?の結論になりまして、処理を変えたら幾分か早くなったので備忘録でかきこ。
前までの処理 (遅)
for (final test in testList) {
hoge.value.add(
await hugaguga(test)
);
}
forループの非同期処理 (順次)
上記でもわるくないのだが、forループ内でawaitを使用すると、各非同期操作が完了するまで次に進まないため、処理が"順次"に行われます。
これはシンプルな制御フローを提供しますが、各非同期操作が独立して並行して実行できる場合、全体の処理時間が長くなる可能性があります。
リストの数が多ければ多いほど処理時間がかかってしまうのがfor文。
変更後の処理 (早)
final testguhu = testList.map((test) async {
await hugaguga(test)
}).toList();
final result = await Future.wait(testguhu);
mapList.addAll(result);
mapとFutureの非同期処理 (並列)
mapを使用して各非同期操作をFutureとして収集し、Future.waitでまとめて待機すると、各Futureが”並列”に実行されます。これにより、並列に非同期処理を実行することで、全体の待機時間を短縮できます。
順次か並列か
実装時に順次に処理するのか並列に処理するのか、どちらがよいのかはその時の条件によってことなるかと思います。
ですので上記はあくまで例ですが、僕が今回処理で必要としたのはmap側でした。
以上!!
Discussion