Jak korzystać z pamięci podręcznej Joomla w widoku komponentów?

13

Jak zwykle w przypadku CMS, najwięcej trafień występuje, dopóki jest on „nowy”. Chciałbym buforować dane wyjściowe strony przy pierwszym renderowaniu dla danego okresu, aby zmniejszyć duże obciążenie wymagane do ich wygenerowania.

Pracowałem na podstawie dokumentacji JCache i opracowałem podstawowe mechanizmy, jak pokazano tutaj:

$cache = JFactory::getCache('MyCache', '');
$cache->setCaching(true);
$cache->setLifeTime(86400);  //24 hours
$cache_id = 'MyCache_page_123';
$cached_page= $cache->get($cache_id);
if (!empty($cached_page)) {
    $the_page_output = $cached_page;
}else{
    $the_page_output = ...<div>the generated view HTML</div>....
    $cache->store($the_page_output, $cache_id);
}
// echo or return "$the_page_output"

Utknąłem, próbując ustalić, gdzie powinienem utworzyć pamięć podręczną, a następnie „słodkie miejsce”, aby użyć tej pamięci podręcznej, zanim cała praca zacznie się od nowa.

PKB
źródło

Odpowiedzi:

9

Jak dotąd wyszukiwania Google zakładają, że Joomla automatycznie buforuje komponent, jeśli dodasz display(true,...)do metody wyświetlania kontrolera, jak w poniższym przykładzie.
Przykład zawiera również kod pomiaru, aby sprawdzić, czy działa (część JProfiler).

public function display($cachable = false, $urlparams = array()) {
    $profiler = new JProfiler();//debug

    //Joomla cache only takes format, option, view, layout, tpl, language en id als default cache_id ($urlparams)
    $input  = new Jinput;
    $urlparams['comp_page_specific_id']=$input->getUInt('comp_specific_id');
    $urlparams['comp_page_specific_else']=$input->getUInt('comp_page_specific_else');

    parent::display(true, $urlparams);
    JFactory::getApplication()->enqueueMessage($profiler->mark( ' seconds with caching<br>Only works after someone has visited this page at least once.<br>Can be reset in backend.' ));//debug
}
  • Musisz ręcznie ustawić,$urlparams które określają, które widoki komponentów potrzebują innej pamięci podręcznej ( że tak powiem, urlparams = identyfikator_pamięci podręcznej ). A Joomla już dba o wspólne parametry, takie jak format, opcja, widok, układ, tpl, język en id.

  • Należy również pamiętać, że żadne aktualizacje nie zostaną wykonane w komponencie. Jeśli masz licznik trafień w swoim modelu, liczba trafień pozostanie stała, gdy zostanie wyświetlony widok z pamięci podręcznej.

* Dodatkowe informacje: W kontrolerze biblioteki joomla jest to następujący wiersz, który wywołuje pamięć podręczną widoku i jednocześnie ustawia pamięć podręczną, jeśli jeszcze nie była:
$cache->get($view, 'display'); //689: legacy controller

( EDIT 2015-01-14: Dodano urlparams)
( EDIT 2015-01-15: Dodano dodatkowe informacje o kodzie)

e-motyw
źródło
but I can't find any core joomla code where the cache is being set.Tylko uwaga - to $cache->getmetoda wewnętrzna
Dmitry Rekun
Łał! To bardzo sprytne kodowanie. Dzięki za informację. Zaktualizuję odpowiedź.
e-motiv
Dla pewności, że odpowiedź jest pełna, oto ona
Dmitry Rekun