« EC仮移転 | メイン | 飛びルーミア製作中 »

2007年01月19日

Ajaxでサーバ負荷を大幅軽減? [DOM]

最近 Ajax というものを知って、かなり感動を覚えた。最近言葉だけは随分と聞いていたが、あまり興味を持っておらずそれが何か確認していなかったのだ。しかしひょんなことから Wikipedia の Ajax の項目を開き、驚愕した。

これこそまさに私が求めていた技術ではないか。

Ajax とは要するに、JavaScript を介してサーバとの通信を行う技術のことである。当初はデータ形式として XML が取り入れられていたためそのような名前が付いたが、最近では XML 以外でやり取りする方法も出てきている。詳しい解説は専門の記事に譲るとして、一体今までのものと何が違うかと言うと、何らかのアクションをするたびに毎回ページの書き換えを行う必要な無いのである。

今までの方法からすると、HTMLフォーム上の submit ボタンを押すとクエリパラメータと共に CGI 等が呼び出され、その 結果としてその CGI が吐き出す HTML を画面に書き出す。というのが一般的だった。毎回画面情報をサーバから出力しなければならず、システムが膨大になるほど、またクリック回数が増えるほど負荷が膨らみ、画面更新に伴うユーザレスポンスも低下した。

しかし Ajax を使うと、毎回画面情報を全て吐き出す必要は無い。必要なクエリ文字列と共にバックグラウンドで JavaScript から CGI 等を呼び出し、返ってきたわずかなデータを再度 JavaScript で受け取ることが出来る。あとは DOM で新たなノードとしてデータを出力するなり、更新するなり、自由自在だ。要するにデータの MVC で言うところの View 部分はほぼ全てクライアントサイドでやってしまおうと言う考え方だ。サーバ側の手間が大いに省け、ユーザレスポンスも大幅に改善する。まるで Window アプリケーションであるかのように Web ブラウザ上で操作が出来ると言うわけだ。それこそ Web アプリケーションの種類によっては、最初の一回だけ CGI から画面を書き出すだけで、あとは JavaScript で全て画面処理を行うことも不可能ではない。

長いこと趣味で Web アプリケーションを作ってきたが、最大のネックとなるのはそこだったのだ。より使いやすくしようとすればするほど一回あたりの出力情報が肥大化し、1回あたりの処理量が莫大になってしまうのだ。しかもそれらのほとんどは冗長でつまらなく、以前とわずかな部分しか変わっていない。

ECの合成倉庫を触ったことがある人は、1つのアイテムを出庫するたびに、毎回全ての倉庫データを読み込んでいたことにきっと気付かれただろう。しかし実際に変わっているのは、その出庫したアイテムわずか一つなのだ。

Ajax を使えば、アイテムを出庫するというデータベース処理のみをサーバサイドで行うだけで、あとの画面処理は全てクライアントサイドで行ってしまう。大げさに画面処理の全てと言っても、それはほんの一作業かそこらにしか過ぎない。倉庫側のアイテムを一個削り、ただそれを装備欄に加えるだけなのだ。なんという手間の短縮であろう!

しかし同時に多くの問題点も生ずる。まずは閲覧環境の問題。比較的最新のWebブラウザ(IE6~,Moz1~)でなくては動作せず、しかもJavaScriptが有効でなければならない。世界の3%程度の人には我慢してもらわないといけないわけだ。もちろん適切に代替手段を作ることは不可能ではない。しかし事実、それは開発工程を倍の長さにするに等しい。Projectが大規模になるにつれ、それらの人々を無視せざるを得なくなってくる。

操作の際に、かなりのクライアント・リソースを消費することも考慮に入れなくてはならない。一昔前のマシンなら、悲鳴をあげてしまう可能性もあるだろう。しかし考えてみれば、それは今までサーバが一様に請け負っていた仕事なのだ。少しはプレイヤー側に負担してもらうのも致し方あるまい。これまで何度も過負荷でサーバを追い出されてきた身なのだ。

さらにはセキュリティ的側面。Viewに関するロジックをまるごとクライアント・コンピュータに投げ出すので、そこでどのようなハックがなされようと、されるがままなのだ。受け取るデータは充分にサーバで検証して、不正データをはじき出さねばなるまい。人が送ろうが、マクロが送ろうが、結局はどちらもプレーンなテキストデータだからだ。

しかしこれらの点を踏まえた上でもなお、Ajax は素敵な技術だ。今までも Flash 等を使えば出来ない事もなかったが、これは新たなソフトウェアと導入せずとも大半のマシンで動かすことの出来る。そしてなにより、私自身新しい技術を学ぶためのコストを最小限で済ませることが出来る。これで負荷問題で一時頓挫していたカードゲームの開発も再開できるってものだ。

しかし、ついにいわゆる "Web2.0" が私の周りにも影響を及ぼし始めたんだなぁ・・・。しばらくは無関係かと思っていたけれども。

投稿者 : 13:43 | コメント (0)

コメント

コメントしてください




保存しますか?

(書式を変更するような一部のHTMLタグを使うことができます)