前回の記事では、await
を使うことで別の処理に実行権を譲れることと、await
を使うとプログラムが複雑になることを示しました。
プログラムが複雑になることはできるだけ避けたいのですが、JavaScriptはシングルスレッドであるため、await
の使用はなかなか避けることはできません。というのも、たとえば10秒以上かかる処理があったときに、await
未使用だと10秒以上フリーズするからです。
ということで、長い時間かかる処理を実装するときは、ところどころにawait
を入れる必要があります。
しかし、今実装している処理が時間のかかる処理かどうかは、実際に動かしてみないとわかりません。ここでいう「時間のかかる処理」は「相対的に」という意味合いが強いです。
たとえば、今実装している処理にかかる時間の割合が全体の90%の場合、この処理にawait
を取り入れることで大きな改善が望めます。しかし、もしこの割合が90%でなく1%の場合、そこにawait
を取り入れることにほとんど意味はありません。確かにawait
を使うことでフリーズの体感時間は減りますが、その代りにプログラムの複雑さが増します。残り99%はまだフリーズしたままですから、1%の処理にawait
を取り入れることで得られるものは「フリーズの体感時間の減少」<「プログラムの複雑さ」になってしまいます。
まとめ
- まずは
await
を使わずに実装する - 各処理にかかる時間を測定し、割合の大きい順に並べる
- 割合の大きい処理から
await
を取り入れていく
この順序で実装していくことが理想です。