刺身の上にたんぽぽ乗せる日記

プログラミングしたり、自販機の下に落ちてる小銭を集めたりしてます

サーバ負荷対策一部完了

あー、面倒だった。

  • smarty cacheを生成(timeout 300sec)
  • rss/人気度のアップデート完了時にキャッシュ全て破棄

の変更。

これからしばらく様子みて、

  • smarty cacheのexpireは後で長めにしてみる
  • RSSsmarty cache化(現在はRSSのモジュールを使ってやってる)

もやるかもしんない。

ethnasmartyのcacheを使うにはどうすればいいの?」って聞いたら「smartyのcacheは悪だから対応してないらしい」と言われ、必死で対応させてみた。

変更方法は以下の通り。

  • action_form
    • setFormVars()をオーバーライドして、パラメータでユニークなIDを生成。具体的には、getArray()で配列とって、arsort()して、foreachでkey:valueで連結しただけ。actionの処理を行うとafの値が色々変化するので、setFormVars()で生成するのがいいっぽい。
    • ユニークなIDを取得するための関数追加
    • 全ページのactionformにこれを継承させる
  • controller
    • smartのcacheを有効化
    • _trigger_WWW()をオーバーライド。action名からテンプレート名をとって、cache_idを拡張したactionformからidをとって、一致するcacheがあればそれをdisplay。なければ通常処理に移る。
  • view
    • forward()をオーバーライド。cache_idを拡張したactionformから取得し、display時にcacheのidを指定。
    • controllerのデフォルトviewをこの拡張viewに変更。

こうすれば、

  • 同じaction_formの値であれば同じ結果を出せる
  • 違うもの(ページ/人気度が違う)であれば、新しく作れる
  • 無効なパラメータであれば、無効なパラメータ用のcacheが作られるが、どうせcronで消してるのでhddが一杯になる、ということはない。
  • 表示するviewをaction側で分岐する場合はcontrollerのtrigger_WWW()でaction名からtemplate名を取る、ってのはできないけど、どっちにせよcacheのミスするので問題無し。
    • 分岐したかったらactionじゃなくてsmartyで分岐させてcache生成がいいのかなぁ?(例:actionでrssと非rss用にtemplateを決めるのではなく、smartyのtemplateでif文で分ける。これでrssも通常表示も同一template名になって、引数が違うのでcache idが変わる)

あー、面倒臭かった。