iKnow! を改良しよう その5 [NT]
iKnow! を改良しよう その4 ~prototype.js~ の続き。 smart.fm が作っている JavaScript を解析してもよく分からなかったので、別の方法で回避した。
prototype.js v1.5.0 の使い方 で解説されている Ajax.Responders や Using Prototype and Scriptaculous with Greasemonkey - Jimbojw.com に載っていた埋め込み JavaScript を Greasemoneky で利用する方法を用いることで、問題は解消。「iKnow! を改良しよう」というネタで続けてきたスクリプトも、ほぼ完成した。
スクリプト適用前:
スクリプト適用後:
作成した Greasemonkey 用ユーザスクリプトを適用すると次の機能が smart.fm に付与される。
- 今日学習したリストには王冠のアイコンがつく。
- 王冠のアイコンは Bronze、Silver、Gold があり、その日に学習すべきアイテムをいくつ学習したかによって異なる。
- 一つも学習してないリストは鉛筆のアイコンになる。
- アイコンをクリックすると、直接 iKnow! か Dictation のアプリケーションが立ち上がる。
- アイコンの表示される条件は次の通り。
- ページのロード
- リストが多く複数ページある場合は、ページの遷移(Ajax的な)
- ユーザスクリプトコマンドに登録したメニュー
不便だと感じていたから作ったものなので、私としてはとても便利。JavaScript/DOM の手習いにもなったし。
しかし、 改善すべき箇所を見つけた。今日の進捗状況を知るために各リストごとに XmlHttpRequest を発行している。iKnow と Dictatin の 2 つがあるから、私の場合は 1 ページあたり、最大 20 回 のリクエストが発生する。これはとても無駄である。たぶん、リクエストを受けたサーバでは DB を検索してレスポンスを返しているわけで、何とか負荷を下げたいところ。
ということで、簡単なキャッシュの仕組みを作った方が良さそう。キャッシュの作成には Greasemonkey の SetValue/GetValue を使えば良い。
自分だけが使うならサーバにかける負荷なんて無視できるレベルだろうが、公開する場合はそうもいかない...かもしれないし。使う人が少ないなら、気にすること無いのだが...
iKnow! を改良しよう ~その6~ へ続く。
コメント 0