Ajaxの非同期をさらに妄想すると
Ajaxでいちばん大事なのは“Asynchronous(非同期)”なんじゃないか、という栗原さんのエントリを、私のAjaxについて書いたエントリの反応としていただきました。
栗原さんのエントリにあるように、私も非同期の重要性はまったくその通りだと思います。Google Mapsで地図をぐりぐりドラッグしていくと、それに連動して地図データがダウンロードされて描画されていく、という動作は(MapionにFlashを使ったものがありましたが)Web上のユーザーインターフェイスとしては、まさに革命的といえると思います。このインパクトはAjaxをブレイクさせた理由の1つでしょう(最大の理由はもちろん“Ajaxと命名されたこと”だと思います)。
で、いまのところAjaxの非同期とはもっぱら、サーバとの通信と、プログラムの実行とが非同期で行われることを指しています。つまり、データをサーバに取りにいっているあいだも、プログラムはデータ待ちで止まったりせず、例えば画面をぐりぐりマウスで操作できる、という動作のことです。
コードのロードと実行も非同期にできたら
ここで非同期で行われることを、サーバとの通信だけでなく、JavaScriptコードのロードと実行にまで広げられたら、Ajaxの可能性というか実装が一段と飛躍するのではないでしょうか。
つまり、いまはAjaxのアプリケーションというのは(恐らくほとんどが)まず最初にJavaScriptコード全体がロードされて、そのあとで実行が始まります。この部分を非同期的にして、コードの一部だけがロードされたら実行を開始できて、残りの部分はバックグラウンドでロードされ続ける、もしくは、その機能が呼び出された時点でロードして実行できる、というようにするのです。
大規模なアプリケーションでの心配
というのも、もし今後本当にOpenOfficeのような大規模なアプリケーションをAjaxで実装するとなれば、コードが大規模なためにサーバから全体をロードするだけで1分もかかる、といったことになりかねません。現時点でも、Zimbraのような大規模なAjaxアプリケーションを試してみると、起動するまでにそれなりの時間がかかります。
そこで、最初は最小限のコードだけでもロードされれば実行を開始し、残りは必要に応じてロードして実行しては破棄する、という形式のほうがAjax的なアプリケーションを効率よく実行可能にできるのではないかと思うのです。また、Ajaxの動作環境としてシンクライアントのように豊富なリソースを想定しない環境でも、この方法は有効のように思います。
とはいえ、こう書いている私はそれほどJavaScriptのコーディングに詳しくありません。私の分かる範囲でJavaScriptのフラグメントごとのロードや実行/破棄といったことが可能か調べてみたところ、できそうにありませんでしたので、これまで書いたことは“こうしたことができたら面白いのではないか”という想像です。
もしもJavaScriptでもできるよ、とか、もうやってるよ、という情報があれば、ぜひ教えてください。あるいは、こんなダイナミックな言語なんて無理、とか、こんな言語に似た機能がある、とかの詳しい方のつっこみなども、よろしければお待ちしています。
Ajaxはエンジニアの想像力を刺激する
Ajaxのように(あるいはリッチクライアントのように)ネットワークからロードされてクライアントで動作するタイプのアプリケーションは、アプリケーションがウイルスに感染する心配も減るし、バージョンアップも容易でTCO削減に有効、データの盗難にも強いといった多くの利点があります。そのうえ、少し経験があるプログラマならすぐに試せて面白い。しかも、GmailやGoogl Mapsといった成功例もあって、まだまだ色んなチャレンジがされている分野です。多くの人がAjaxでOpenOfficeが実装されるのではないか? と一時期とはいえ想像したように、こんなことできたらいいな、という想像を大いに刺激されるところがAjaxにはあります。Ajaxにネガティブな人のコメントでさえ、そう感じることがあります。
もちろん、徐々にAjaxに対する評価は少しずつ落ち着いていくでしょうけれど、それでもいまAjaxの周辺にうずまく色んな開発者のエネルギーによって、Ajaxも、その土台となるJavaScriptや関連ツールもこれから大きく進化して、いまあるいろんな欠点のいくつかは克服されていくことでしょう。ですのでいま目の前のAjaxだけを見て「これには向いてない、あれができない」というのは、ちょっと先走っているように思います。
なにより、Ajax自身がJavaScriptやXMLといった既存のものを活用して、新しい可能性を拓いてみせたわけですから。