질문/조언질답게시판
Extra Form
PHP PHP 8.0
CMS Rhymix 2.x

이곳 XETOWN pr님께서 개발해주신 pr_hit_lists 위젯의 경우에

 

슈퍼캐시의 위젯캐시 기능을 통해서 캐싱을 설정하면

 

위젯의 style(틀)은 유지가 되는데 내용이 비어져서 출력이 되는 경우가 종종 있더라구요

예를들어 XETOWN의 위젯을 예를 들어서 보여드리자면

 

<<원래 보여야 할 위젯>>

44.PNG

 

<<슈퍼캐시 위젯 캐싱 사용시 보이는 위젯>>

아래와같이 위젯껍데기(제목)을 제외하고는 로드되지가 않습니다

333.PNG

 

물론 새로고침 몇번하면 정상으로 돌아오는 경우도 있긴 한데

 

이 부분은 위젯의 코드가 문제일까요?

 

<?php
class pr_hit_lists extends WidgetHandler
{
function proc($args)
{
$limit_count = $args->lists_count ? $args->lists_count : 10;

$hit_lists = Context::get('pr_hit_list');
if(!$hit_lists)
{
$hit_lists = array();
}

if(count($hit_lists) > $limit_count)
{
$hit_lists = array_slice($hit_lists, 0, $limit_count);
}

Context::set('hit_lists', $hit_lists);

// Set a path of the template skin (values of skin, colorset settings)
$tpl_path = sprintf('%sskins/%s', $this->widget_path, $args->skin);
Context::set('colorset', $args->colorset);

// Compile a template
$oTemplate = TemplateHandler::getInstance();
return $oTemplate->compile($tpl_path, 'list');
}
}

 

 

  • profile

    네, 위젯의 구조가 캐싱에 적합하지 않은 것 같습니다.

     

    캐싱은 $args를 기준으로 이루어지기에, 모든 위젯은 $args로 넘겨받은 값들을 이용하여 (쿼리를 한다든지, 외부 API에서 뭔가를 불러온다든지 하는 방법으로) 일정한 결과를 만들어내야 합니다. 그런데 저 위젯은 $args와 무관한 Context::get('hit_pr_list')라는 외부 데이터를 기준으로 결과를 생성하고 있습니다. 외부 데이터가 있는지 없는지, 무엇이 들어 있는지에 따라 다르게 동작하는 것이지요. 이런 위젯은 슈퍼캐시는 물론이고 코어 자체의 캐시 기능과도 호환되지 않을 가능성이 높습니다.

  • profile profile
    아 네 역시....! 답변 감사합니다~