프래그먼트 캐싱은 웹페이지의 특정 조각을 캐싱하는 것을 말합니다. 예를 들어 페이지의 연간 판매 요약이 테이블에 표시되는 경우 이 테이블을 캐시에 저장하여 각 요청에 대해 다시 생성하는 데 필요한 시간을 줄일 수 있습니다.
조각 캐싱을 사용하려면 컨트롤러 보기 스크립트에서 CController::beginCache() 및 CController::endCache()를 호출하세요. 두 방법 모두 캐시될 페이지 콘텐츠를 포함하여 시작하고 끝납니다. 데이터 캐싱과 마찬가지로 캐시된 조각을 식별하려면 숫자가 필요합니다.
...别的HTML内容... <?php if($this->beginCache($id)) { ?> ...被缓存的内容... <?php $this->endCache(); } ?> ...别的HTML内容...
위에서 BeginCache()가 false를 반환하면 캐시된 콘텐츠가 자동으로 이 위치에 삽입됩니다. , if
문 내의 내용은 endCache()가 트리거될 때 실행되고 캐시됩니다.
beginCache() 호출 시 두 번째 매개변수로 캐싱 옵션으로 구성된 배열을 제공하여 프래그먼트 캐시를 맞춤화할 수 있습니다. 실제로 편의상 BeginCache() 및 endCache() 메서드는 [COutputCache] 위젯의 래퍼입니다. 따라서 COutputCache의 모든 속성은 캐시 옵션에서 초기화될 수 있습니다.
아마도 가장 일반적인 옵션은 콘텐츠가 캐시에서 유효한 기간을 지정하는 기간일 것입니다. CCache::set() 만료 매개변수와 유사합니다. 아래 코드는 최대 1시간 동안 콘텐츠 조각을 캐시합니다.
...其他HTML内容... <?php if($this->beginCache($id, array('duration'=>3600))) { ?> ...被缓存的内容... <?php $this->endCache(); } ?> ...其他HTML内容...
마침표를 설정하지 않으면 기본값은 60 입니다. 이는 캐시된 콘텐츠가 60초 후에 유효하지 않음을 의미합니다.
데이터 캐싱과 마찬가지로 콘텐츠 조각도 캐시될 때 종속성을 가질 수 있습니다. 예를 들어, 기사의 수정 여부에 따라 기사의 내용이 표시됩니다.
종속성을 지정하기 위해 ICacheDependency를 구현하는 개체 또는 종속성 개체를 생성하는 데 사용할 수 있는 구성 배열일 수 있는 종속성 옵션을 생성합니다. 다음 코드는 lastModified
열 값의 변경 여부에 따라 조각의 내용이 달라지도록 지정합니다.
...其他HTML内容... <?php if($this->beginCache($id, array('dependency'=>array( 'class'=>'system.caching.dependencies.CDbCacheDependency', 'sql'=>'SELECT MAX(lastModified) FROM Post')))) { ?> ...被缓存的内容... <?php $this->endCache(); } ?> ...其他HTML内容...
캐시된 콘텐츠는 일부 매개변수에 따라 변경될 수 있습니다. 예를 들어, 모든 사람의 프로필은 다릅니다. 캐시된 프로필 내용은 각 개인 ID에 따라 변경됩니다. 이는 BeginCache()가 호출될 때 다른 ID가 사용된다는 의미입니다.
COutputCache에는 이 기능이 내장되어 있어 프로그래머는 ID를 기반으로 콘텐츠를 변경하는 패턴을 작성할 필요가 없습니다. 아래는 요약입니다.
varyByRoute: 이 옵션을 true로 설정하면 캐시된 콘텐츠가 경로에 따라 변경됩니다. 따라서 각 컨트롤러와 작업 조합에는 별도의 캐시된 콘텐츠가 있습니다.
varyBySession: 이 옵션을 true로 설정하면 캐시된 콘텐츠가 세션 ID에 따라 변경됩니다. 따라서 각 사용자 세션에는 캐시에서 제공하는 서로 다른 콘텐츠가 표시될 수 있습니다.
varyByParam: 이 옵션의 배열에 이름을 설정합니다. 캐시된 콘텐츠는 GET 매개변수의 값에 따라 변경됩니다. 예를 들어 페이지가 id
GET 매개변수를 기반으로 기사 콘텐츠를 표시하는 경우variByParam을 array('id')
으로 지정하여 각 기사 콘텐츠를 캐시할 수 있습니다. 이러한 변경이 없으면 특정 기사만 캐시할 수 있습니다.
varyByExpression: 이 옵션을 PHP 표현식으로 설정하면 이 PHP 표현식의 결과에 따라 캐시된 콘텐츠가 변경되도록 할 수 있습니다. 이 옵션은 버전 1.0부터 사용할 수 있습니다. 4.
가끔 특정 유형의 요청에 대해서만 조각 캐싱을 활성화하고 싶을 때가 있습니다. 예를 들어, 특정 웹 페이지에 표시할 양식의 경우 처음에 요청한 양식(GET 요청을 통해)만 캐시하려고 합니다. 이후에 표시되는 모든 양식(POST 요청을 통해)은 양식에 사용자 입력이 포함될 수 있으므로 캐시되지 않습니다. 이를 위해 requestTypes 옵션을 지정할 수 있습니다:
...其他HTML内容... <?php if($this->beginCache($id, array('requestTypes'=>array('GET')))) { ?> ...被缓存的内容... <?php $this->endCache(); } ?> ...其他HTML内容...
Fragment 캐시는 중첩될 수 있습니다. 즉, 캐시 조각이 더 큰 조각 캐시에 연결됩니다. 예를 들어 댓글은 내부 조각 캐시에 캐시되고 기사 콘텐츠와 함께 외부 캐시에 함께 캐시됩니다.
...其他HTML内容... <?php if($this->beginCache($id1)) { ?> ...外部被缓存内容... <?php if($this->beginCache($id2)) { ?> ...内部被缓存内容... <?php $this->endCache(); } ?> ...外部被缓存内容... <?php $this->endCache(); } ?> ...其他HTML内容...
중첩 캐시는 다양한 캐시 옵션을 설정할 수 있습니다. 예를 들어 위의 예에서는 내부 캐시와 외부 캐시의 기간 값을 다르게 설정할 수 있습니다. 외부 캐시에 저장된 데이터가 유효하지 않은 경우 내부 캐시는 여전히 유효한 내부 조각을 제공할 수 있습니다. 그러나 그 반대는 사실이 아닙니다. 외부 캐시에 유효한 데이터가 포함되어 있으면 내부 캐시의 콘텐츠가 만료된 경우에도 캐시된 복사본을 영원히 유지합니다.
위는 Yii Framework 공식 가이드 시리즈 30 - Caching: Fragment Caching 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!