Joomla'nın Önbelleğini bileşenler görünümümle nasıl kullanabilirim?


13

Tipik olarak bir CMS'de olduğu gibi, en çok isabet hala "yeni" iken gerçekleşir. Sayfa çıktısını oluşturmak için gereken ağır iş yükünü azaltmak amacıyla belirli bir süre için ilk kez oluşturulduğunda önbelleğe almak istiyorum.

JCache belgelerinden çalışıyorum ve temel mekaniklerin burada gösterildiği gibi çalışmasını sağladım :

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

Nerede önbellek, sonra tüm çalışma yeniden başlamadan önce bu önbelleği kullanmak için "tatlı nokta" belirlemeye çalışırken sıkışmış .

Yanıtlar:


9

Şu ana kadar Google aramaları , aşağıdaki örnekte olduğu gibi denetleyicinizin görüntüleme yöntemine eklerseniz joomla'nın bileşeninizi otomatik olarak önbelleğe aldığınıdisplay(true,...) varsaymamı sağlıyor .
Örnek ayrıca çalışıp çalışmadığını kontrol etmek için bazı ölçüm kodlarını içerir (JProfiler bölümü).

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
}
  • Hangi bileşen görünümlerinin farklı bir önbelleğe ihtiyaç duyduğunu tanımlamak için manuel olarak ayarlamanız$urlparams gerekir ( konuşmak için urlparams = cache_id ). Ve Joomla zaten biçim, seçenek, görünüm, düzen, tpl, dil kimliği gibi ortak parametrelerle ilgileniyor.

  • Ayrıca , bileşeninizde hiçbir güncelleme yapılmayacağını unutmayın. Modelinizde bir vuruş sayacı varsa, önbelleğe alınmış bir görünüm gösterildiğinde isabet sayısı sabit kalacaktır .

* Ek bilgi: Joomla kütüphanesinin denetleyicisinde, görünüm önbelleğini çağıran ve aynı zamanda önbelleği henüz ayarlanmadıysa ayarlayan şu satırdır:
$cache->get($view, 'display'); //689: legacy controller

( EDIT 2015-01-14: Ek URL'ler eklendi) ( EDIT 2015-01-15 : Ekstra kod bilgisi eklendi)


but I can't find any core joomla code where the cache is being set.Sadece bir not - bu $cache->getyöntem içinde
Dmitry Rekun

Vaov! Bu çok zekice kodlama. Bilgi için teşekkürler. Cevabı güncelleyeceğim.
e-motiv

Sadece cevap dolu olduğundan emin olmak için, burada öyle
Dmitry Rekun
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.