컴포넌트보기에서 Joomla의 캐시를 사용하려면 어떻게해야합니까?


13

일반적으로 CMS의 경우와 마찬가지로 여전히 "새"인 동안 가장 많은 조회가 발생합니다. 주어진 시간 동안 페이지 출력을 처음 렌더링 할 때 페이지 출력을 캐시하여 페이지 생성에 필요한 작업량을 줄이려고합니다.

나는에서 일한지 JCache의 문서, 다음과 같이 기본적인 역학이 밖으로 일이 :

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

캐시를 어디에서 만들어야하는지 결정한 다음 모든 작업을 다시 시작하기 전에 해당 캐시 를 사용 하는 "스위트 스폿"을 고수 했습니다.

답변:


9

지금까지 Google 검색을 통해 다음 예제와 같이 컨트롤러의 표시 방법에 추가하면 joomla가 자동으로 구성 요소를 캐시display(true,...) 한다고 가정합니다 .
이 예제에는 작동하는지 확인하기위한 측정 코드도 포함되어 있습니다 (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
}
  • 다른 캐시가 필요한 구성 요소보기를 정의하는 url수동으로 설정$urlparams 해야합니다 ( urlparams = cache_id ). Joomla는 이미 형식, 옵션,보기, 레이아웃, tpl, 언어 및 ID와 같은 일반적인 매개 변수를 처리합니다.

  • 또한 구성 요소에서 업데이트 가 수행 되지 않습니다 . 모델에 적중 카운터가있는 경우 캐시 된보기가 표시 될 때 적중 수가 일정하게 유지 됩니다.

* 추가 정보 : Joomla 라이브러리의 컨트롤러에서 뷰 캐시를 호출하는 동시에 다음 라인으로 캐시가 아직 설정되지 않은 경우 캐시를 설정합니다.
$cache->get($view, 'display'); //689: legacy controller

( 편집 2015-01-14 : urlparams 추가)
( 편집 2015-01-15 : 코드 추가 정보 추가)


but I can't find any core joomla code where the cache is being set.참고 사항-그것은 내부 $cache->get방법입니다
Dmitry Rekun

와! 그것은 매우 영리한 코딩입니다. 정보에 대해서 감사드립니다. 답변을 업데이트하겠습니다.
e-motiv

답변이 가득 찼는 지 확인하려면 여기에 있습니다
Dmitry Rekun
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.