てきとうなメモ

本の感想とか技術メモとか

Ajax in Actionを読む (1)

洋書の方.英語がムズイ.

sovereign or transient

Cooperはデスクトップアプリケーションをその動作から4つのpostureに分類した.postureとは,アプリケーションのユーザに対する見せ方を意味している.このうちsovereign, transientについて説明する.

sovereign applicationとはWordやExcelのように,ユーザがそれを用いて何時間も作業を行うタイプのアプリケーションである.逆に,transient applicationとはsovereign applicationで作業を続けている合間に,一時的に利用するアプリケーションのことを指す.例えば,ファイラやメーラなどがそれに当たる.ファイラでファイルをコピーするのに,数秒かかってもユーザはあまりいらつかない.これはファイラがtransient applicationであるためである.しかし,WordやExcelなどで一つの操作を行うごとに数秒の遅れがあれば,ユーザはひどく怒るだろう.

Amazonのようなクラシックなウェブアプリケーションは基本的にtransient applicationである.ボタンやリンクを押すたびに作業が数秒止まってもユーザがいらいらすることは少ない.しかし,ウェブアプリケーションでsovereign applicationを開発しようとした場合,そのレスポンスの遅さは致命的になる.

非同期イベント処理

client/server型のアプリケーションのレスポンスの遅さに対抗する手段として,非同期イベント処理を用いる方法がある.そうすることで,クライアントはサーバからのレスポンスを待たずに作業を続けることができ,生産性を落とさずに済む.これは昔から用いられてきた手法である.しかし,これをウェブアプリケーションに適用するのには問題がある.

なぜなら,HTTPがrequest-responseプロトコルであるからだ.request-responseプロトコルは一方向であり,サーバから通信を開始することができない.非同期イベント処理ではクライアントは2度通知を受けなければならない.1度目はスレッドが起動された時,2度目はスレッドが終了した時である.しかし,クラシックなウェブアプリケーションはこれを行うことができない.

Ajaxの定義

この本ではAjaxの考え方を理解するための4つのポイントを挙げている

ブラウザはコンテンツを保持するのではなく,アプリケーションを保持する

クラシックなウェブアプリケーションでは,ユーザはコンテンツ(ページ)のみを保持し,ユーザのワークフローに関しては全く知らない.しかし,Ajaxアプリケーションでは,クライアントはコンテンツだけでなく,JavaScriptで書かれたアプリケーションも受け取る.アプリケーションにはユーザのロジックが記述されており,アプリケーションはユーザのアクションに反応し,自らが処理を行うか,サーバにリクエストを送信するかを決定することができる.

サーバはコンテンツではなくデータを配信する

クラシックなウェブアプリケーションでは毎回,コンテンツ(ページ全体)とデータを送信する.Ajaxアプリケーションでは必要なデータのみを通信し,コンテンツの中身を変化させる.最初にコンテンツとアプリケーションを送信するので通信量は多いが,その後は必要なデータのみを送受信すればいいので,セッション全体での通信量はクラシックなウェブアプリケーションより少なくなる.

ユーザは作業を止めずに柔軟にアプリケーションを操作することができる

クラシックなアプリケーションでは,送信ボタンを押した後,サーバからレスポンスが戻ってくるまで作業を行うことができなかった.しかし,Ajaxアプリケーションでは非同期処理を用いているため,作業を続けることができる.また,クラシックなウェブアプリケーションでは,ボタンをクリックする,リンクをクリックするなどの限られた操作方法しかなかったが,Ajaxアプリケーションでは,Google Mapsのようにドラッグ&ドロップを用いたり,Google Suggestのようにキーストロークを用いたりすることで直感的な操作を行うことができる.

本格的なコードを書かなければならず,訓練が必要

クラシックなアプリケーションでは,JavaScriptは単にフォームの入力値チェックのコードを書くためのものであった.しかし,Ajaxアプリケーションでは,セッションの間ずっと処理を行わなければならなく,長時間の処理に耐えられなければならない.これはsovereign applicationならばなおさらである.そのために,サーバサイドのアプリケーションと同様に,訓練を積み高性能で保守のしやすいコードを書かなければならない.

その他

Ajaxとは直接関係ないのだが,Cooperの記事も結構面白い.1995年と古いのだがいまでも通じるのではと思う.WordやExcelのインターフェースに対する批判も少し書かれている.