FuelPHP:ORMのキャッシュ
FuelPHP
とても詳しい説明が下記にあります。
FuelPHPのOrmとキャッシュについてのTips
ザックリまとめると、、、、
FuelPHP の ORM ではキャッシュ機能を自前で備えていて、これをオフにすることは出来ない。
このキャッシュがいろいろと問題を起こしてくれるので、キャッシュの挙動をある程度理解して使わないと想定外の動作となることがある。
といった感じでしょうか。
個人的には余計なことをするな!と感じますな。
キャッシュがあると速度的に有利なのかもしれませんが、いわゆる誤動作の類も起きるし、だいたいそんなに早くなってるのか!?という気もするし。
キャッシュの類を使おうと思えば、今なら memcached のようなキャッシュ専門の仕掛けを使った方がいいと思います。
そもそも、キャッシュを使う理由は性能向上もしくは負荷軽減になるかと思いますが、とりあえずキャッシュの前にコードの最適化とか DB 最適化とか、サーバの分散的なものとかやれることがいろいろあるわけで。。。
デフォルトでキャッシュがオンになっていることすら違和感がありますが、オフに出来ないとなるとホント困ったものだとしか言いようがないですね。
これは、もしかしたら FuelPHP の一番の問題かも知れません。
そして、これがさらに問題なのですが、キャッシュという特性だけに、ORM のオブジェクト自体が無くなってもキャッシュは無くなりません。
つまり、ORM オブジェクトを生成していくとどんどんキャッシュでメモリが圧迫されます。
実装の内容によっては、ホントに驚くほどものすごい勢いでメモリが圧迫されます(^_^;
といったわけで、上のサイトでも記載されています(ただしタイプミス?なのか厳密には正しくないですが)が、キャッシュをクリアして使用しているメモリを解放する方法だけ記載しておきます。
以下のメソッドを ORM を継承したクラスに追加し、呼び出すことでキャッシュが解放されます。
public static function clear_cache() { static::$_cached_objects[get_called_class()] = false; }
本当は、ORM のオブジェクトが unset 等で destroy される際に自動的に呼び出すような設定も出来れば良いと思いますが、そこまでは追っていません(/_\*)