データクラスを使用してテンプレートにデータをフィードします。データクラスのデータから一意のIDを計算して、そのデータを含むテンプレートが既にキャッシュにあるかどうかを確認して、そのバージョンを提供できるようにします。
そのため、クラスの配列から一意のIDを取得する関数が役に立ちます。
このようなものは機能しますが、かなりコストがかかりますmd5(serialize($classdata))
すべてのデータをシリアル化せずに、または少なくともphpでシリアル化する必要がなく、一意のIDを取得する関数があることを期待しています。
編集:
私はあまりにも早く祝いました。一意のIDは現在のインスタンスでのみ同じであり、同じスクリプトを再起動すると別のIDが作成されますが、もちろんキャッシュにはありません。
使用したテストスクリプト:
<?php
class foo {}
$f = new foo;
print spl_object_hash($f);
もう少し詳しく説明します
class template_data implements IteratorAggregate, ArrayAccess, Countable {
private $_data;
//some methods for the overloaded classes
//
//the getId function
public function getId() {
return hash('md5',serialize($this->_data));
}
}
$t = new template('file');
$d = new template_data('some data');
$t->addData($d);
$t->display();
これで、テンプレートエンジンに提供されたデータがキャッシュにある場合、そのバージョンが使用され、データセットのテンプレートを再解析する必要がなくなります。
これはtemplate_dataの単純化されたビューであり、実際には遅延読み込みであり、memcached dataidを使用するため、テンプレートで使用されるまでデータは実際にはフェッチされません。