it-swarm-eu.dev

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

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 dalla documentazione 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.

12
GDP

Finora le ricerche di Google mi fanno presumere che joomla memorizza automaticamente nella cache il componente se 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 che definisce quali viste dei componenti necessitano di una cache diversa (rlparams = 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 nessun aggiornamento verrà eseguito 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 aggiuntive: 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: Urlparams aggiunti)
( EDIT 15/01/2015: informazioni aggiuntive sul codice aggiunto)

8
e-motiv