2010-09-20 6 views
6

J'ai une collection qui prend beaucoup de temps à charger. Ce que je voudrais, c'est le mettre en cache (APC, Memcache). Il n'est pas possible de mettre en cache l'intégralité de l'objet (car il ne peut pas être désérialisé et il est supérieur à 1 Mo). Je pense que la mise en cache des données de la collection ($ col-> getData()) est le chemin à parcourir, mais je n'ai trouvé aucun moyen de reconstruire l'objet basé sur ce tableau. Des indices?Comment mettre en cache une collection dans Magento?

Répondre

1

Je ne sais vraiment pas, mais j'ai cherché tous les fichiers qui ont le mot "cache" dans les noms de fichiers "Collection.php" et j'ai obtenu quelques résultats. L'exemple le plus prometteur à regarder pourrait être la méthode Mage_Sales_Model_Entity_Quote_Item_Collection (_getProductCollection()). On dirait Varien_Data_Collection (qui est une classe parente de toute collection magento) a quelques méthodes liées au cache: initCache() and _getCacheInstance().

Je ne peux pas dire que je les ai déjà utilisés, mais pourrait être utile un jour.

Bonne chance.

4

Collections ont déjà une certaine mise en cache incorporée mais ils ont besoin d'un peu incitant donc mettre cela dans le constructeur d'une collection:

$cache = Mage::app()->getCacheInstance(); 
$prefix = "SomeUniqueValue"; 
$this->initCache($cache, $prefix, array(Mage_Catalog_Model_Product::CACHE_TAG)); 

Choisissez balises appropriées au contenu de la collection afin qu'il sera automatiquement vidée . De cette façon, construit un ID basé sur la requête en cours d'exécution, il est plus utile lorsque la collection est filtrée, ordonnée ou paginée - il évite un conflit de version.

En règle générale, cela ne sert à rien car lorsque vous récupérez des données, vous finissez presque toujours par les afficher, probablement en HTML, il est donc logique de mettre en cache la sortie à la place. La mise en cache des blocs est largement utilisée et mieux documentée.

+0

Comment je peux mettre en cache une collection à la place depuis le Bloc Objetc ??? – davidselo

+0

Je ne comprends pas la question. – clockworkgeek

+0

Si je peux faire un bloc avec Mage :: getModel ('example/example') -> getCollection() -> initCache (...). Créer une nouvelle collection depuis l'instance de bloc – davidselo

Questions connexes