2008年4月4日金曜日

Client-let

Javaにはサーブレット(servlet)がある。これは小さなサーバ(serv(er)-let)を意味する。
同様にアプレット(applet)もある。これは小さなアプリケーション(app(lication)-let)を意味する。
ここに小さなクライアント(client-let)を加えようという提案だ。
発端はアプレットの遅さにある。
アプレットは有望な技術に思われたが十分に活用されているとはいいがたい。その原因はアプレットの遅さにある。
アプレットが遅いのは毎回起動するからだ。クラスは初回ダウンロードされるが、それ以外はキャッシュされる。問題はJVMの起動時間だ。
この問題はCGIと同じだ。それに対する解答がサーブレットだったはずだ。
CGIは毎回プロセスを起動するので遅い。しかし、サーブレットはあらかじめ起動したプロセスの中でスレッドとして動作するので速い。
同じことをクライアントで行えばよい。
つまり、ブラウザと並行にJVMを起動しておき、アプレットをスレッドとして実行する。このような形態にクライアントレットという名前を付けてみた。
これは誰もが思いつくが、それでも実現していないのには理由がある。1つは実装が容易ではないため、もう1つは安全でないためだ。
単にブラウザと同時にJVMを起動すればよいというわけではない。それではブラウザの起動が遅くなり、全体の使用感が悪化する。しかし、オンデマンドで起動すれば現状と変わらない。すなわち、ブラウザ起動後からJVMを必要とする前の間に、ゆっくりと穏やかにJVMを起動させる必要がある。急激に起動させるとCPUを奪いユーザ経験を悪化させる。したがって、ゆっくり起動させる必要がある。これが結構難しい。
致命的かも知れないのは安全でないことだ。複数のアプレットが同じJVMで稼働するため1つの障害が他を巻き添えにするかもしれない。サンドボックスの実装が困難になる。
この記事は想像で書いているので、実際のブラウザの実装を確認しているわけではない。そのため、すでにここで述べた工夫が取り入れられている可能性もある。それでも遅いのならしかたない。

0 件のコメント: