先日、
新しいホテルや新築ホテルを探すサービスとして、
『あたらしホテル』というページをオープンしたのですが、
とっても大きな問題がありました。
とにかく表示が遅い。
そりゃあもうカップラーメンを準備して出来上がるくらいに。
都道府県や地域を選んで検索ボタンを押したら最後、延々と続く読み込みタイム。
30秒ならまだいい方で、
1分・・2分・・
時には時間がかかったあげくのタイムアウトも起こって。
作った本人でさえ、
つくった当時は達成感でいっぱいだったものの、
日が経つにつれ、
と思うようになり、
見た目は同じなものの、中身をもりっと入れ替えることにしたのでした。
新しいホテルを探すサービス 問題点
なぜにそんなに時間がかかったのかというと、一番の原因は、
最大30件の制約
だろうと思います。
楽天トラベルAPIのページを見るとわかるのですが、
『1ページあたりの取得件数』
という箇所に、
1ページ毎の取得件数を制限するパラメータ。
1以上、30以下の整数であること。(*1)
という記載があります。
どういうことかというと、
例えば熊本県熊本市のホテルを探してみると、2019年4月時点で89件あるのですが、
1ページあたり最大30件しか取得できないので、
- ページ1・・30件
- ページ2・・30件
- ページ3・・29件
と、同じ熊本市にも関わらず、3ページに分かれることになってしまいます。
それぞれURLが違うので、3回にわけて情報を取りに行く必要があると同時に、
3ページに分かれているとどれが新しいホテルなのかがわからないので、
3ページを1ページにくっつけた後に、ホテル番号を比較して新しい順に表示
という手順を踏む必要がありました。
3ページならまだいいのですが、
10ページ、20ページとホテル数が増えるほど、
全部のページを読み込んでからくっつけて順番つけ、という手順が
とても時間がかかっていました。
新しいホテルを探すサービス 改善策
読み込みスピードを速めるための策として、
一度、全てのデータをデータベースに保存して、
データベースから呼び出すことにしました。
楽天トラベルに登録されているホテル・旅館の総数はざっくり3万件。
データ量としては多いっちゃあ多いけれど、
データベースなら問題なく扱える量です。
楽天トラベルでは、日本全国のホテル・旅館を
『都道府県・小エリア・詳細エリア』
という3つの情報でグループ分けしているので、
それぞれのアクセスURL + ページ番号 を整理してメモ帳にまとめて、
メモ帳のアクセスURLを1行ずつPHPで読み込ませて、
1件ずつデータベースに保存させて、というプログラムを組みました。
約8時間くらいで完成して、
いざ動かしてみたら、ざっと4時間くらいかかって、
日本中のホテル・旅館の情報を取得することができました。
新しいホテルを探すサービス 改善後
以前は数十秒〜数分〜タイムアウトと、
気の遠くなるくらいに表示が遅かったのですが、
改善してからは、約1秒〜2秒 くらいで表示されるので、
大幅にストレスフリーになったんじゃないかなと思います。
新しいホテルを探すサービス の派生版
今後は、派生版として、
- バリアフリーなホテル
- 『離れ』の旅館
- 『個室食』のホテル
- 『ペットと泊まれる宿』
- 金庫のあるホテル
あたりのサービスをつくろうと思います。
ベースのプログラムはできているので、
それぞれ1時間もあればつくれるんじゃないかなと思います。
新しいホテルを探すサービス を改善してみて
サービス当初は恐ろしく表示スピードが遅かったので、
早めに方法を切り替えてよかったなと思います。
技術的には、
『PHP』や『Laravel』をメインに使っているのですが、
何度もなんどもググってはエラーを出し、
ググってはエラーを出してきた経験のおかげで、
アイデアを思いつくだけでなく、実際に作り上げることができるようになってきたなぁと実感します。
これからも、プログラミングを通じて、
どんなに小さくてもいいので、身の回りのちっちゃな問題の解決ができたらなと思っています。
この記事へのコメントはありません。