AjaxといえばAsynchronous JavaScript + XMLの略なので、頭の"A"は、"Asynchronous(非同期)"の意味です。
ある方に「AjaxのAって非同期だよね?技術的にはどうなってるの?」と聞かれたので、「あー、技術的には軽量の同期技術(http)を使っているんですが、ユーザーさんの感覚と非同期になっているだけなんですよ」と答えました。
※3/6追記。コメントいただきました。僕の理解は間違っていて「画面描画と通信」というクライアント内での処理がマルチスレッドによって非同期になっているのを"Asynchronous(非同期)"と考えるのが正しいです。というわけで、この後の議論は僕の誤解に基づく論理展開としてお楽しみくださいませ。
後になって考えてみたのですが、これってけっこう重要なことだなと。
非同期を非同期技術で実現しようとするから高くなる
梅田さんの「ウェブ進化論」の中で、某大手電気メーカーではてなマップのデモをしたところ、うん億円はかかるだろうという意見がでたそうです。でも、実際には2,3日で作られたので数十万円。実に1000倍の開きがあります。
なんで、うん億円もかかるかというと、非同期な動作を「非同期な技術」で実現しようとするからなんですね(もちろん、このチャレンジ自体はすごい大事なのでお金がかかることがだめだってことではないです)。
Web2.0はアイデア勝負
これに対してWeb2.0系のマインドは、今ある軽量技術で、いかに「そのように感じるのか」を実現するのに血道をあげます。まさにアイデア勝負。繰り返しますが、Ajaxの"A"は、人間の認知として非同期に思えるというのがポイントです。だから、非同期に感じられれば同期技術を利用していてかまわないのです。
最近、JavaScriptで遊ぶことが多いのですが、タブによる切り替えなんかも実装します。どうするかっていうとtableタグを用意してtrタグに属性idを仕込んだ上で、trの表示/非表示を切り替えるだけなんです。そうすると、タブがあるように感じます。タブシートを用意して、その階層をずらして、、、なんてことはしなくていいのです。こんな感じ。
タブ1 | タブ2
| あああ(タブ1で表示) |
| いいい(タブ2で表示) |
| ううう(タブ1で表示) |
| えええ(タブ2で表示) |
このように認知と技術というのは必ずしも一致している必要性はないし、むしろ軽量でシンプルな技術を使って、そのように感じさせるというのが楽しい。Web2.0はアートだと書きましたが、そういうことなかと。
人間にどう感じさせるかが重要
この考え方はエンタープライズ・アプリケーションの分野でも重要です。以前、ORACLEのチューニング講義を受けたとき講師の方が最後に言っておられた極意は「遅く感じさせないUI」でした。曰く「レスポンス3秒を2秒にする努力をするぐらいなら、3秒待てるように砂時計を出した方がよっぽど安くて安全」。
エンジニアの悪い癖で、なんでも技術的にどうなんだという議論に陥りがちです。でも、実際に使うのは人間なわけで、人間がどう感じるのかをいうことを考えるというのも重要だなと。
デザインの輪郭とITアーキテクトの役割にも書きましたが、相手にしていのは人間なのです。
というわけで、AjaxのAの意味は「技術と認知の非同期」なんだと考えるようにします。

コメント (4)
なんか読んでて、なにか変だなー、ずれてるなーと思ったら、同期通信・非同期通信の事を話していたのですね?
Ajaxの文脈でいうAsynchronousとは、UIが動いているアプリケーションのメインスレッドとは別スレッドで通信処理をUI処理と非同期に行う処理の事を言ってるわけで、もともとHTTPなどの通信技術の同期、非同期を指しているわけではないですよ。
そもそも指しているレイヤーが違う。
同期通信(HTTP)を非同期通信に見せかけてるから、Asynchronousといっているとか、そういったレベルの話ではないです。
通常、ウェブ系の通信を行うソフトウェアではマルチスレッドにしてHTTP通信を非同期で処理します。そうしないと、通信処理が終わるまでUIが固まってしまうからです。なんで、マルチスレッドで通信処理とメインスレッドを分けて非同期で処理する事を、ソフトウェア開発では、マルチスレッドで非同期(Asynchronous)処理を行うと言います。
「非同期」というと、通信関係の人はどうとるのか知らないけど、少なくともソフトウェア開発では、そういうことです。当たり前の事を名前に含めたのは単に語呂が良いからでしょう。
投稿者: あsdf | 2006年03月06日 01:16
日時: 2006年03月06日 01:16
yusukeです。あsdfさん、コメントありがとうございます。
なるほどAsynchronousというのはマルチスレッドの話ですか。画面描画と通信が非同期ということですね。誤解していたようです。
というわけで訂正文を追記しておきました。
投稿者: yusuke | 2006年03月06日 01:36
日時: 2006年03月06日 01:36
すみません、コメントした時、疲れて眠かったので言葉がぶっきらぼうだったかもしれません。
もちろん、おしゃってる論点は相変わらず有効で、重要だと思いました。
投稿者: あsdf | 2006年03月06日 08:43
日時: 2006年03月06日 08:43
yusukeです。いへいへ、お気になさらず(笑)。
「画面遷移と通信の非同期」という認識はあったのですが、いわれてみればクライアントのスレッドの話で、通信と混同した僕が甘いのです。こういうミスをやりがちで、エンジニアとしてはいかんなとおもいつつ。
ご指摘ありがとうございました。こういうのは遠慮なさらずに、どんどんお願いします(^_^;)。
投稿者: yusuke | 2006年03月06日 10:17
日時: 2006年03月06日 10:17