誰かのforループが僕を動けなくする。

Asynchronous programming can be hard, but the tools and languages support it, my friends.

Please don’t block the UI.

引用元: I'm stuck in someone's for loop – Scott Hanselman.

forループであったり、サーバー問い合わせであったり、データの書き込みであったりといった時間のかかる処理を、同期処理してしまうと、UIがロックされてユーザーは何も出来ないし、そのうちにOSが警告を出してしまったりする。

何よりもユーザーの気分を損ねてしまうので、そうなったらそのソフトウェアはすばらしいサービスやアイデアを持っていても、アンインストールされて使われなくなるか、怒り狂ったユーザーから電話がかかってくることになるし、こうして有名人にBlogを書かれてしまったりもするわけだ。どっちにしろ作った側の収入や職に関わってくる。

ユーザーを止めないためには、とにかくユーザーに対してすぐにレスポンスを返して、少しでも時間のかかる処理はUIスレッドとは別のスレッド、プロセスで実行し、UIスレッドはいつも開けておくことだ。ただし、多くのUIフレームワークはシングルスレッドモデルを採用しているので、スレッドのプログラミングは難しくなる。また、非同期処理でレスポンスを返しても、ユーザーは気が移ろいやすいので、指示して、非同期で実行されている処理を、途中で投げ出したり、やめたくなるかもしれないと言うことを前提にする必要もあり、UI、コードとも設計が難しい。

ただ、現代的なフレームワークであれば、何らかの補助的な機能が用意されている場合があるので、助けになることもあるし、Reactive Programmingも助けになるかもしれない。ただし、それでも相変わらず、処理に時間のかかる場合に同ユーザーの関心をどうそのソフトウェアにつなぎ止めておくかという、UI上の設計課題は残る。砂時計だけではイラッとさせるだけだ。砂時計も出ないよりはマシではあるけど。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください