Zend_Cache_Frontend_Pageを使ってページを丸ごとキャッシュする

はじめに

こんにちは。ワンツースリーの昼下がり、いかがお過ごしでしょうか。
この記事は アイスタイル Advent Calendar 2018 の3日目の記事です。
アイスタイルでWEBのフロントエンド/バックエンドエンジニアをやっています高田が担当させていただきます。

実はアイスタイル社内は今てんやわんやしております。
なんでかっていうと、CMをご覧になった方もいらっしゃるかもしれませんが、まさに今日から大きなイベント、@cosme Beauty Day 2018 が行われてるからです。
この記事では、このイベントに向けて、あるサービスのある画面で行った対応について少し書きたいと思います。

Zend Frameworkについて

弊社のあるサービスでは、言語はPHP、フレームワークは Zend Framework で開発を行っています。
Zend Framework は、PHP で実装されたオープンソースのWebアプリケーションフレームワークです。
だいぶ昔に作られたサービスなので技術選択の経緯等は分かりませんが、今もこのフレームワークを使用しています。

Zend_Cacheについて

Zend Framework の中の機能である Zend_Cache では、以下のようなものをキャッシュすることができます。

  • Zend_Cache_Frontend_Output: 出力
  • Zend_Cache_Frontend_Function: 関数呼び出し
  • Zend_Cache_Frontend_Class: オブジェクトやスタティックメソッドの呼び出し
  • Zend_Cache_Frontend_File: ファイルをパースした中身
  • Zend_Cache_Frontend_Page: ページ全体

キャッシュ先は、ファイル、Sqlite、Memcache などを選ぶことができます。
今回はサーバ負荷軽減のために、特定のパスにアクセスが来た際に、サーバから返す静的なHTMLを丸ごとキャッシュしたかったので、 Zend_Cache_Frontend_Page を使用しました。

Zend_Cache_Frontend_Page について

Zend_Cache_Frontend_Page は、ページ全体をキャッシュする仕組みです。
Zend_Cache_Frontend_Page では、特定のパスへのリクエストが来た際に、キャッシュにヒットした場合には、そこでphpのスクリプトの処理が停止し、キャッシュされていたものが返されます。

Zend_Cache_Frontend_Page の設定方法

Manual – Documentation – Zend Framework を参考に実装しました。
debug_headertrue にしておくと、レスポンスされるHTMLの中にデバッグ用のコードが含まれ、それがキャッシュであることが分かりやすかったので、開発中は true にしておくのがオススメです。

設定の実装は全然難しくなかったです。
この対応のためにコードを漁っていたら、Zend_Cache の設定の処理は書かれていたものの、キャッシュするかどうかの boolean 値 cachingfalse になっていたという状態だったのもあります。
ただ、もし1から書いたとしても、そんなに変わらないくらい簡単だと思いました。

リリースしてみての効果

レスポンスの速度について

サーバの負荷対策のために行いましたが、レスポンスの速度がすごいことになったので画像を添付いたします。
がぞー

思ったこと

エンジニアとして、「このアプリケーションを一気に最強の技術スタックに書き換えてやりたい!!」って思うことは当然あります。
僕もこのサービスを担当するようになって、「ここを大きく書き換えて、一気にサーバ負荷改善、速度改善してやりたい!」と思っていたし、今も思っているところはあります。
しかし、それにはリスクや工数などなど、いろんな問題を一気に解決する必要があることを意味します。
今回、今すでに使っているフレームワークの中で、使われていない機能を知り、それを実導入できて、さらにそれが結果につながったことで、リスクや実装工数を最低限にして、結果を出すことも素晴らしいことであると実感しました。
地に足を着けて、暗くなっている灯台の下を見て、できることを探し、着実に改善を進めていくこともとても大事だなと思いました。

おわりに(業務でやってることがレガシーだから、大したことやってないから、需要がないだろうからという理由でアウトプットしていないあなたへ)

どんなにレガシーなシステムを担当していても、あなたは必死に、知恵を絞って業務をこなしているはずです。
それが「大したことない」なんてことは絶対にありません。
あなたが知恵を絞って得たその知識や経験や発想は、きっと世界のどこかで、誰かが欲している貴重なものでしょう。
また、「最新の技術しかアウトプットしてはいけない」とか「その技術の第一人者しかアウトプットしてはいけない」なんてルールはどこにもありません。
だから恥ずかしがらず、恐れずに、あなたが持っているものを存分にアウトプットしてください。
きっと、それが誰かに届き、回り回ってあなたを助けることとなるでしょう。
来年は、あなたのアウトプットしている姿が見られるのを楽しみにしています。
よいお年を。

アイスタイルのWEB開発をより良いものにするために日々頑張っています。 好きな言語はJavaScriptです。 アプリ開発のバックグラウンドもあります。