ATND Search のレスポンスが劇遅なのを改善

随分前に作って放ったらかしだった
ATND Search
の改修を行いました。


昔の記事。

問題点

ActiveResource使って、APIのデータをカレンダーに突っ込むだけのアプリなんですが、
ATNDの人気が出過ぎて、月当たり500件以上というイベント数になっており
データ取得に時間が掛かりまくってました。


実は、APIの制限上1アクセス当たり100件までの取得しかできないため、
全件取得だと6回(毎回1.x〜2.x秒ほど)もアクセスしていました。


⇒事実上使えないので、アクセス数減らしたい。

解決策

悩んだ結果、案4で仮実装。

案1

定期的にcrawlして、DBに入れたらいいやん。
→せっかくActiveResource使ってるので、違う方法で実装したい。
→却下

案2

検索条件設定を必須として、取得対象データを少なくする。
→100件以内になるように制御できるなら、ありかも。
→でも、きっと関東圏(東京)が多くを占めるので、そっちの人は、それほど効果的でないかも。
→却下

案3

ajaxでリクエスト毎に追加。
→ポコポコ増えるのやだ。(あとsort面倒)
→却下

案4

定期的にcrawlして、DBに入れずにon memoryで処理。
→複数月をメモリに入れるのは面倒なので、
 (暫定的に)参照頻度の高いページは当月だろうし、とりあえず他は参照対象外としてみる。
→翌月のページも見れるようにした方がいいとは思うが
 とりあえず、この辺の実装は後で考える。
 過去のデータは変更されないので、ここはDBでもいいか?

改善後

レスポンスとしては、まぁなんとか我慢できる範囲に納まったかな。
(内部的には、まだまだ改善可能)


見た目は、あんまり変更無し。
デフォルト、3ヶ月を超えるスパンのイベントは非表示にしたり
and / or 検索に対応。