Como posso usar o cache do Joomla com a visualização dos meus componentes?

12

Como normalmente ocorre com um CMS, a maioria das ocorrências ocorre enquanto ainda é "nova". Gostaria de armazenar em cache a saída da página na primeira vez em que ela é renderizada por um determinado período, a fim de reduzir a pesada carga de trabalho necessária para gerá-la.

Eu tenho trabalhado a partir da documentação do JCache e tenho as mecânicas básicas trabalhadas conforme mostrado aqui:

$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"

Estou preso tentando determinar onde devo criar o cache e, em seguida, o "ponto ideal" para usá- lo antes que todo o trabalho comece novamente.

PIB
fonte

Respostas:

8

Até agora, as pesquisas no Google me fazem supor que o joomla armazena em cache seu componente automaticamente se você adicionar display(true,...)ao método de exibição do seu controlador, como no exemplo a seguir.
O exemplo também inclui algum código de medição para verificar se está funcionando (parte do 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
}
  • Você precisa definir manualmente$urlparams quais definem quais visualizações de componentes precisam de um cache diferente ( urlparams = cache_id, por assim dizer). E o Joomla já cuida de parâmetros comuns, como formato, opção, visualização, layout, tpl, idioma e id.

  • Lembre-se também de que nenhuma atualização será feita no seu componente. Se você tiver um contador de visitas no seu modelo, o número de ocorrências permanecerá constante quando uma exibição em cache for mostrada.

* Informações extras: No controlador da biblioteca joomla, é a seguinte linha que chama o cache de exibição e, ao mesmo tempo, define o cache, se ainda não o foi:
$cache->get($view, 'display'); //689: legacy controller

( EDIT 2015-01-14: URLs adicionados adicionados)
( EDIT 2015-01-15: informações adicionais de código adicionadas)

e-motiv
fonte
but I can't find any core joomla code where the cache is being set.Apenas uma nota - é dentro de $cache->getmétodo
Dmitry Rekun
Uau! Essa é uma codificação muito inteligente. Obrigado pela informação. Vou atualizar a resposta.
e-motiv
Só para ter certeza que a resposta é completo, aqui é
Dmitry Rekun