もしもゲットAPIのダイエットと、「ちょんぼ」した話

もしもゲットAPIのダイエットと、「ちょんぼ」した話

前に書いたもしもAPP「もしもゲットAPI」のこと。そのとき書いた通り不必要な機能を落としてみました。つまり「在庫状況」のみに限定するという話です。あとキャッシュについてもちょっと。

なぜjavascriptのダイエットが必要なのか

詳しくないので大雑把に書きますよ。間違ってたらご指摘くだされ。

なぜjavascriptのダイエットが必要なのかというとWEBページというのはそれを構成するhtmlファイルとデザインファイルや画像、場合によってはブラウザにダウンロードした後にそこで走らせるjavascriptなんかもダウンロードさせる。

ここで問題なのがjavascriptは処理中にhtmlのレンダリングを止めてしまうこと。これを避けるために</body>の寸前に書くのですが、このため今回のように

javascript>php>もしもサーバ>php>javascript

と処理して表示する部分は他より1テンポ遅れてしまいます。在庫状況なんて遅れてもたいしたことないと思うのですが。実際に買い物をしようとしているユーザーからみたらどうだろう。0.5秒後くらいならタイムラグで脳内処理できるでしょうが、3秒後に表示されると不信感が出てくるのですよね。実際私も「何今の?」ってなります。

この場合は遅くなる要因はjsだけではないですが処理を減らしておくに超したことはありません。それにこの元APPはもしもAPIでできることをほぼ網羅しているようで、私にとっては不必要な部分が多いのです。

やってみた

ザザザーと見ながら、他の処理しているであろう部分をテストしながら削っていく。ようはもしもAPIの仕様所見て在庫と関係ない呼び出しとそこに使われている変数らへんを消していけばいい。

在庫状況も「在庫あり」や「在庫無し」という文字を取得するようになっていたので数字を返してもらうように変更。これで任意なコードを書けるように、つまり自由にデザインできるようになった。

さらにこのAPPだと在庫の表示パータンが「商品詳細ページ用」と「一覧ページ用」の2つがある。仕様をざっと見てみると、なるほどベタのhtmlページを編集するユーザ向けに手間を減らせるようになっていた。一応動的ページでしか使わない予定だし、これも一覧ページ用だけあれば済む(詳細ページ用より処理が軽いと思われた)為、詳細ページ用のコードを削除。

妥協しながらも完成

結果、サンプルを含めて約550kb–>約180kbとなった。もっとじっくりコードを見直せば、もっともっと軽くなると思うけど、途中で「ここまで消すんなら必要な機能を抜いてつなげた方が早かったんじゃないか」と思い始め、モチベーション下がってきたのと、なんかすげーめんどくさくなったため適当なところで切り上げた。

まぁ、そんなに遅くもないしキャッシュ機能付だからこれをこのまんま公開側のサイトで使う。

キャッシュの必要性

キャッシュといってもブラウザのキャッシュでなくて、サーバー側のキャッシュです。

あるユーザーが商品Aにアクセスしたときにその在庫状況、例えば「在庫あり」という情報をサーバー上に保存しておきます。それから決まった時間内、例えば1時間以内に別のユーザが同じ商品Aを見た場合にはもしもドロップシッピングのAPIにアクセすせず、先に保存した「在庫あり」を呼び出して表示します。その間に「在庫わずか」になってる可能性もありますが、私のショップなんかどうせ人気サイトなんかになりっこないので大丈夫。

大事なことはもしもAPIには(この記事を書いている時点で)「1分間に90回のアクセスを超えると、アカウントが1分間凍結されるようになっている」ってこと。素人なりに「一覧ページ表示で何十回のアクセスとかになるのか?」などと不安はありますがそれはやっみればいいとして、一応キャッシュがあるに超したことはのよ、という話でした。

バックアップ取り忘れ

ブログ書きたくなったメインの話。JavaScriptファイルをminifyしていて、ついでにphpまで同じくminifyしたんですが(さすがにphpはかなり意味ない作業)、どちらもその直前のファイルのバックアップを取ってなかったこと…。悔しい…ほんとに悔しいです。これだとphpのバージョンアップや、もしもAPIの仕様変更等で動作しなくなったときに最初からやり直しである。特にphp…

バックアップといってもバージョン名をつけたフォルダに中身をコピペするだけなのですが…後で見てみるとそのフォルダに中身はありませんでした。command+vの押しミスだと思う。いつまでたってもミスは起こすものですね。

適当とは言え、思うところはできたので欲しいという人いたらコメント下さい。配布ライセンス的にどうか知りませんがダウンロードページでもこしらえます。では。