ケイタイでAJAX(3): ブックリーダー
2005.07.19
数日前に、ケイタイ版のAJAX RSSリーダーを公開したが、今回は「なぜケイタイにAJAX、特に非同期通信が重要か」を良く表すアプリケーションのサンプルが出来たので、ここで公開する。
ドコモの携帯電話をお持ちの方は上のQRコードをカメラで取り込めばアプリをダウンロードできる(今、シアトルにいるので、申し訳無いが実機でのテストはできない。もし、不具合に気がついた場合コメント欄などで報告いただけるとありがたい。)。そうでない方は上の「ブックリーダーのデモ」をクリックしていただければ、エミュレーター上でもデモを見ることができる(IE6.0、Firefox 1.04、Safari 2.0 で動作確認済み)。
ウェブ・サービスを利用する(つまり、通信によりデータをサーバーに取得に行く)携帯電話用ウェブ・アプリケーションを作る場合に特に注意しなければいけない主な点を上げると、以下のようになる。
(1)ネットワーク遅延が通常のインターネットと比べてとても大きい(数秒間)
(2)ワーキングメモリの量が少ない(500KB~2MB)
(3)一度に通信できるデータ量が少ない(10KB~30KB)
(4)パケット量に比例した通信料金を徴収される従量課金方式である
こういった特徴があるために、同期通信しかできない今の世代のブラウザーでウェブ・アプリケーションを作ると、画面を少しスクロールしては「次へ」というリンクを選び、そのたびに数秒間待つ、というとても使い勝手の悪いものになってしまうのである。
そこで、ここでは非同期通信専用に作ったスクリプト・エンジン(UIEngine)を使い、ネットワーク遅延を出来るだけユーザーの目に触れないような形でブック・リーダーを作ってみた。このアプリのアーキテクチャーを簡単に説明すると、以下のようになる。
最初にダウンロードするのはスクリプト・エンジンのみ(約28KB)である。ユーザーがアプリ(実はスクリプトエンジン)を立ち上げると、スクリプトで記述されたブックリーダー・アプリのテンプレート(約3.4KB)をダウンロードする(ただし、これはスクラッチパッドにキャッシュされるので、2回目からの通信は必要無い)。続いて、スクリプトで記述されたブックリーダーのロジックが、段落ごとに別々のXMLファイルに格納された本の中身(この本の場合146個のファイル)を、非同期通信でサーバーから取得する(一段落あたり、1~2KB)。ただし、無駄な通信を省くため、ユーザーが見ている部分の後の6段落分のみを先読みするようにしてある。また、同じ段落を再度サーバーから読み込むことを避けるために、一度読み込んだ段落の内容はスクラッチパッドに保存するように作ってある。
この様に非同期通信を活用する事により、ユーザーの感じるネットワーク遅延を限りなく少なくすることが出来るし(文章を上から順番に読む限り遅延は見えない)、ブラウザー・アプリにつき物の「ウェブ・ページ」という概念から開放され大量の文章が一続きの文章としてアクセス可能になる。その上「先読み」と「キャッシュ」のおかげで、ある程度までは(最大で6段落先まで)オフラインで読むこともできる。
ちなみに、本質とは関係ないが、おまけ(というか、UIの実験)として「速読トレーニング」の機能も入れてみた。「下」キーを押すことにより3行ずつスクロールすることができるのだが、新しく現れた部分のバックグラウンドを3秒間だけ少し薄い色にしているのだ。こうすることにより、スクロール直後にどこに目線を移せば良いかが明らかになるし、(色が薄い間に読み終わるようにして読み続けることにより)「速読」のトレーニングにもなるのだ。
エミュレーターデモが動かせずにおります。
WinXP SP2: IE6.0.2900
WinXP SP2: FireFox V1.04
Win2K : IE6.0.2800
セキュリティやJavaの設定などの理由かと思い、すべてEnableのなんでもありセキュリティで試してみても上手くいきませんでした。
ちなみに前回のRSS Readerのエミュレーターも同様です。
アドバイス頂ければ幸いです。
Posted by: Jun | 2005.07.20 at 15:37
不思議ですね?ひょっとしたら Java のランタイムがインストールされてないのかも知れませんね。お手数ですがhttp://www.java.com から Java のランタイムをダウンロードしてインストールしていただけますか?
Posted by: satoshi | 2005.07.20 at 15:48
ありがとうございます。解決いたしました。お騒がせしてすいません。
Posted by: Jun | 2005.07.20 at 16:24