Smarty 템 플 릿 엔진 캐 시 메커니즘 상세 설명

이 사례 는 Smarty 템 플 릿 엔진 캐 시 체 제 를 다 루 었 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
먼저 스마트 캐 시 와 컴 파일 을 말씀 드 리 겠 습 니 다.이것 은 두 가지 서로 다른 개념 입 니 다.컴 파일 은 기본 적 인 상황 에서 시 작 됩 니 다.캐 시 체 제 는 인위적인 오픈 이 필요 합 니 다.스마트 컴 파일 된 파일 인지 phop 파일 인지 실행 할 때 컴 파일 된 것 입 니 다.데이터 베 이 스 를 다 루 려 면 데이터 베 이 스 를 방문 해 야 하기 때문에 비용 도 적지 않 습 니 다.그래서 스마트 캐 시가 해결 해 야 합 니 다!
1.전역 캐 시 열기

$smarty->cache_dir = "/caches/"; //    
$smarty->caching = true; //    , flase       
$smarty->cache_lifetime = 3600; //    

2.한 페이지 에 여러 개의 캐 시 사용
예 를 들 어 하나의 글 템 플 릿 페이지 는 여러 개의 글 페이지 를 만 들 수 있 습 니 다.물론 캐 시 를 여러 페이지 로 만 들 수 있 습 니 다.이 는 간단 합 니 다.display()방법 으로 두 번 째 인 자 를 설정 하고 유일한 식별 자 를 지정 하면 됩 니 다.다음 php 코드:

$smarty->display('index.tpl',$_GET["article_id"]);

위 와 같이 두 번 째 매개 변수 글 의 id 를 통 해 글 페이지 를 캐 시 합 니 다.
3.캐 시 비용 줄 이기
즉,캐 시 된 페이지 는 데이터 베 이 스 를 조작 할 필요 가 없 으 며,is 를 통 해cached()방법 판단!

if(!$smarty->is_cached('index.tpl')){
 //     
}
$smarty->display('index.tpl');

4.캐 시 지우 기
일반적으로 개발 과정 에서 캐 시 를 열지 않 습 니 다.캐 시 시간 내 에 출력 결과 가 변 하지 않 기 때 문 입 니 다.그러나 응용 과정 에서 캐 시 를 켜 면 웹 성능 을 크게 향상 시 킬 수 있 습 니 다.캐 시 를 지 우 는 방법 은 다음 과 같 습 니 다.

clear_all_cache();//      
clear_cache('index.tpl');//  index.tpl   
clear_cache('index.tpl',cache_id);//    id   

5.부분 캐 시 닫 기
한 페이지 의 일부 캐 시,다른 부분 은 캐 시 가 필요 하지 않 으 면 이렇게 할 수 있 습 니 다.예 를 들 어 사용자 로그 인 이름 을 표시 하려 면 캐 시 를 닫 아야 합 니 다.smarty 는 다음 과 같은 세 가지 해결 방법 을 제공 합 니 다.
(1)insert 템 플 릿 의 일부분 을 캐 시 되 지 않 습 니 다.
inser 태그 에서 사용 할 처리 함 수 를 정의 합 니 다.함수 이름 형식 은 insert 입 니 다.xx(array$params,object&$smarty)의 xx 는 insert 의 name 입 니 다.즉,함수 가 insert 라 고 정의 하면abc,템 플 릿 에서 사용 하 는 방법 은{insert name=abc}입 니 다.
매개 변 수 는$params 를 통 해 전 달 됩 니 다.
insert 플러그 인 으로 도 만 들 수 있 습 니 다.파일 이름 은 insert.xx.phop 이 고 함수 이름 은 smarty 입 니 다.insert_aa($params,&$smarty),xx 정의 동일
(2)$smarty->register_block($params,&$smarty)은 전체 페이지 의 한 조각 을 캐 시 하지 않 습 니 다.
Block 정의:

smarty_block_name($params,$content, &$smarty){return $content;} 
//name     

등록 block:

$smarty->register_block(name, smarty_block_name, false);
//    false         

템 플 릿 쓰기:

{name}   {/name}

block 플러그 인 으로 쓰기:
첫 번 째 단계:플러그 인 함수 정의:Block.cacheless.php,smarty plugins 디 렉 터 리 에 놓 기
Block.cacheless.php 의 내용 은 다음 과 같 습 니 다.

<?php
function smarty_block_cacheless($param, $content, &$smarty) {
return $content;
}
?>

두 번 째 단계:프로그램 및 템 플 릿 작성
예제 프로그램:testCacheLess.php

<?php
include(Smarty.class.php);
$smarty = new Smarty;
$smarty->caching=true;
$smarty->cache_lifetime = 6;
$smarty->display(cache.tpl);
?>

사용 할 템 플 릿:cache.tpl

     :{$smarty.now}<br>
{cacheless}
     :{$smarty.now}
{/cacheless}

지금 실행 해 보 니 소 용이 없 었 습 니 다.두 줄 의 내용 이 모두 캐 시 되 었 습 니 다.
STEP 3:스마트 바 꾸 기Compiler.class.php(주:이 파일 은 매우 중요 합 니 다.필요 할 때 복구 할 수 있 도록 백업 하 십시오)
찾기:
$this->_plugins[block][$tag_command] = array($plugin_func, null, null, null, true);
다음으로 변경:

if($tag_command == cacheless) $this->_plugins[block][$tag_command] = array($plugin_func, null, null, null, false);
else $this->_plugins[block][$tag_command] = array($plugin_func, null, null, null, true);

원문의 마지막 매개 변 수 를 false 로 바 꿀 수도 있 습 니 다.즉,기본 캐 시 를 닫 는 것 입 니 다.
(3)register 사용function 플러그 인 이 캐 시 에서 출력 되 는 것 을 막 습 니 다.
index.tpl:

<div>{current_time}{/div}
index.php:
function smarty_function_current_time($params, &$smarty){
  return date("Y-m-d H:m:s");
}
$smarty=new smarty();
$smarty->caching = true;
$smarty->register_function('current_time','smarty_function_current_time',false);
if(!$smarty->is_cached()){
  .......
}
$smarty->display('index.tpl');

주석:
함수 이름 형식:smartytype_name($params, &$smarty)
type 은 function
name 사용자 정의 탭 이름,여기{currenttime}
두 매개 변 수 는 필수 입 니 다.함수 에 사용 되 지 않 더 라 도 적어 야 합 니 다.두 매개 변수의 기능 이 같다.
더 많은 스마트 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
이 글 은 스마트 템 플 릿 을 기반 으로 한 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기