xrea-banner xreaad

非同期

namespace kilrey; / JavaScript / AJAX / 非同期

前のページ(導入)へ / 次のページ(通信手法)へ

非同期ということについて少し詳しく書きます。 現代のコンピュータではソフトウェアの実行時に 一つのソフトウェアが複数のプロセスを動かしていて それぞれのプロセスが複数のスレッドを動かしていることがあります。 ちなみにスレッドの仕組みは スレッド を参照してください。

一般的なブラウザの実装でも 通信、描画、スクリプト実行などを独立したスレッドで行っています。 多くの場合は描画が最も速く次がスクリプト実行で通信が最も遅くなります。 スクリプトの内部で描画を行う場合には単に終了を待てば十分ですが 通信を行う場合にも単に終了を待つのでは時間の無駄が大きいでしょう。 それならば通信を行うのは通信スレッドに任せて スクリプト実行スレッドはスクリプトの続きを実行した方が効率が良いのです。

ただしスクリプト実行スレッドから通信の状態を知る必要があります。 一般的な実装ではこれにコールバックという手法が採用されています。 コールバックとはサブルーチン・関数に別のサブルーチン・関数を渡して 一連の作業の途中に呼び出させるというもので、 コードの一部分だけを動的に切り替えたい場合に利用されます。 ブラウザ上のスクリプトの場合では 一つの通信に対してサブルーチン・関数を登録して 通信が終わったなどのイベント時に呼び出させるというように使います。

非同期通信によって実行効率が上がったことによる 具体的なユーザの利益は何でしょうか。 スクリプトの実行が速く終わったとしても 何もせずに待機していたのでは意味がないのです。 ユーザの利益として一般的に挙げられているのは ユーザの入力に対する応答が即座に出来ることです。 例えば、フォームで何かを入力する場合です。 旧来の Web サービスでは一度送信してからサーバ側で検査するので 画面遷移を挟むために入力間違いへの応答が遅くなります。 AJAX 的な Web サービスでは入力した時点でクライアント側で検査するので 入力間違いへの応答が圧倒的に速くなります。 動的にヘルプ・ページを読み込んで表示すればより親切ですね。

前のページ(導入)へ / 次のページ(通信手法)へ