Come posso usare Joomla's Cache con la vista dei miei componenti?


12

Come in genere accade con un CMS, la maggior parte degli hit si verificano mentre è ancora "nuovo". Vorrei memorizzare nella cache l'output della pagina la prima volta che viene eseguito il rendering per un determinato periodo in modo da ridurre il pesante carico di lavoro necessario per generarlo.

Ho lavorato sulla documentazione di JCache e ho risolto i meccanismi di base come mostrato qui:

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

Sono bloccato nel tentativo di determinare dove dovrei creare la cache, quindi il "punto debole" per utilizzare quella cache prima che tutto il lavoro ricomincia.

Risposte:


8

Finora le ricerche di Google mi fanno presumere che joomla memorizzi automaticamente nella cache il componente se lo aggiungi display(true,...)al metodo di visualizzazione del controller come nell'esempio seguente.
L'esempio include anche un codice di misurazione per verificare se funziona (parte 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
}
  • Devi impostare manualmente$urlparams quale definire quali viste dei componenti necessitano di una cache diversa ( urlparams = cache_id per così dire). E Joomla si prende già cura di parametri comuni come formato, opzione, vista, layout, tpl, linguaggio en id.

  • Inoltre, tieni presente che non verranno effettuati aggiornamenti nel tuo componente. Se hai un contatore di hit nel tuo modello, il numero di hit rimarrà costante quando viene mostrata una vista cache.

* Informazioni extra: nel controller della libreria joomla, è la seguente riga che chiama la cache della vista e allo stesso tempo imposta la cache se non fosse ancora:
$cache->get($view, 'display'); //689: legacy controller

( EDIT 2015-01-14: Aggiunti gli urlparam)
( EDIT 2015-01-15: Aggiunte ulteriori informazioni sul codice)


but I can't find any core joomla code where the cache is being set.Solo una nota - è all'interno del $cache->getmetodo
Dmitry Rekun

Wow! È una codifica molto intelligente. Grazie per le informazioni. Aggiornerò la risposta.
e-motiv,

Giusto per essere sicuro che la risposta è pieno, qui si tratta
Dmitry Rekun
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.