既に日常日記の方で報告したように、WiMAX エリアマップの鉄道版とも言える「WiMAX 鉄道スピードテスト」を公開。UQ も力を入れている鉄道での WiMAX エリア化について、スピードテストの実測値をみんなで共有するサイトなので、WiMAX ユーザーの方は是非、速度を測定して結果をご登録下さい。

さて、こちらは PC 日記なので、WiMAX 鉄道スピードテストの仕組み的なところなどを。

大まかな流れは、予め路線&駅のデータベースを用意しておき、ユーザーの結果登録の際には、選択肢から路線や駅を選んでもらう。結果が投稿されたら、データベースに登録すると共に、駅別・路線別での集計を行う。

基本的な設計思想は、「なるべくサーバーに負担をかけない」。無料レンタルサーバーなので、重い処理をやらせると本当に重くなってしまいそうだったのと、下手するとアカウントを消されてしまいそうなので。

そのため、集計ページにアクセスされる度にデータベースを読んで、ダイナミックにページを生成する方式は却下。本当は、ダイナミックに生成する方が、最近 3 ヶ月だけの結果を表示するとか、いろいろなことができそうなんだけど、我慢我慢。測定結果登録時に静的 HTML を生成する方式とした。

測定結果登録時、カテゴリ・鉄道会社の選択によって路線の選択肢が変わるようになっているが、こういうインタラクティブな部分も、極力 JavaScript の実装にして、サーバーに負担を掛けないようにしている。

鉄道会社のカテゴリのうち、JR は 1 社 1 カテゴリになっているのも、実は負荷軽減のため。測定結果が登録された場合、最終的にはカテゴリの路線一覧を更新する必要があるが、JR 全体を 1 カテゴリにまとめてしまうと、路線数がかなり多くなってしまい、更新に時間がかかってしまう。

右側メニューの「最近の登録」は、実はインラインフレーム。正攻法でいくと、測定結果が登録されたら、既存の全てのページの「最近の登録」を書き換えないといけないが、これはとてもとても重すぎる。そこで、「最近の登録」を集めた HTML 1 つのみを更新し、他の全てのページは、この HTML をインラインで読み込んでいる。

ブログシステムは「最近の記事」をどうやって処理してるんだろう。さすがに記事登録ごとに全ページ更新はやっていないのではと思うのだけど。キャッシュ機構を導入して、初回表示時に「最近の記事」を合成する、とかなのかな。

負荷以外の面で言えば、路線ごとのつながりをちゃんと管理しているのがポイント。例えば、山手線では、大崎駅で埼京線などに乗り換えができる旨の表示を行い、ワンクリックでその路線の結果を見ることができるようになっている。

表示で苦労したのは、速度の棒グラフ。グラフ自体は簡単なんだけど、グラフに数字を重ねるというのが難しい。毎回グラフの長さが違うので、グラフを背景画像にするというわけにはいかない。いろいろ試行錯誤した結果、棒グラフと数字を 2 行で表示し、棒グラフは行半分だけ下にずらし、数字は逆に行半分だけ上にずらすことで、重ね合わせを実現している。この方法であれば、乗り換えセルが複数行になっても、棒グラフはきちんと重ね合わせが維持される。

単純そうなサイトだけど、意外とそれなりに苦労しているのであった。