2010-09-20 17 views
6

Mam kolekcję, której ładowanie zajmuje dużo czasu. To, co chciałbym, to cacheować (APC, Memcache). Nie można buforować całego obiektu (ponieważ nie może on być spersonalizowany i ma ponad 1 MB). Myślę, że buforowanie danych kolekcji ($ col-> getData()) jest drogą do zrobienia, ale nie znalazłem sposobu na odbudowanie obiektu na podstawie tej tablicy. Jakieś wskazówki?Jak buforować kolekcję w Magento?

Odpowiedz

1

Naprawdę nie wiem, ale szukałem wszystkich plików, które zawierają słowo "cache" z nazwami plików "Collection.php" i otrzymałem kilka wyników. Najbardziej obiecującym przykładem może być metoda Mage_Sales_Model_Entity_Quote_Item_Collection (_getProductCollection()). Wygląda na to, że Varien_Data_Collection (która jest rodzicielską klasą dowolnej kolekcji Magento) ma kilka metod związanych z pamięcią podręczną: initCache() and _getCacheInstance().

Nie mogę powiedzieć, że użyłem ich wcześniej, ale mogą się one przydać kiedyś.

Powodzenia.

4

Kolekcje mają już pewne buforowanie wbudowany ale muszą trochę skłoniło więc umieścić to w konstruktorze kolekcji:

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

Wybierz tagów odpowiednie do zawartości kolekcji, dzięki czemu będzie ona zaczerwieniona automatycznie . W ten sposób buduje identyfikator na podstawie wykonywanego zapytania, jest najbardziej przydatny, gdy kolekcja jest filtrowana, sortowana lub stronicowana - pozwala uniknąć konfliktu wersji.

Ogólnie rzecz biorąc, prawie się to nie przydaje, ponieważ podczas pobierania danych prawie zawsze kończy się wyświetlaniem go, prawdopodobnie jako HTML, więc sensowne jest buforowanie danych wyjściowych. Blokowanie buforowania jest szeroko stosowane i lepiej udokumentowane.

+0

Jak mogę buforować kolekcję zamiast bloku Block Objetc ??? – davidselo

+0

Nie rozumiem pytania. – clockworkgeek

+0

Jeśli mogę zrobić trought Block with Mage :: getModel ("przykład/przykład") -> getCollection() -> initCache (...). Tworzenie nowej kolekcji od czasu wystąpienia bloku – davidselo