콘텐츠 캐시 출력 PEAR 캐시
다음으로 이 기사의 초점이기도 한 보다 일반적으로 사용되는 캐싱 기술을 살펴보기 시작합니다. 먼저 PEAR의 캐시 패키지를 사용합니다. PEAR는 파일, 데이터베이스 또는 메모리에 콘텐츠를 캐시할 수 있습니다.
다음은 캐싱을 사용하지 않는 작은 PHP 프로그램입니다:
pear_content_cache1.php
<?php
echo "내용입니다. <P>";
echo "현재 시간은" . date('MdY H:i:s A', time()) "<BR>";
?>
위 프로그램은 매우 간단합니다. 이제 캐싱을 추가하겠습니다.
pear_content_cache2.php
<?php
require_once 'Cache/Output.php';
//쓰기 가능한 캐시 디렉토리 설정 $cacheDir = './pear_cache';
$cache = new Cache_Output('file',array('cache_dir' => $cacheDir));
//nocache 변수가 비어 있으면 캐시에 있는 콘텐츠를 사용합니다. //최신 콘텐츠를 얻으려면 할당하세요. nocache 변수 if (empty($_REQUEST['nocache']))
{
// 고유한 캐시 ID 생성 // 요청 + 쿠키 정보 $cache_id = $cache->generateID(array('url' => $_REQUEST,'post' =>$_POST,'cookies' => $HTTP_COOKIE_VARS) );
}
또 다른
{
//최신 콘텐츠를 얻으려면 ID가 비어 있어야 합니다. $cache_id = null;
}
//($content = $cache->start($cache_id))인 경우 캐시 ID에 해당하는 캐시 콘텐츠가 사용 가능한지 확인합니다.
{
//캐시가 이미 존재하므로 직접 출력하고 스크립트를 종료합니다. echo $content;
출구();
}
// 캐시에 콘텐츠가 없습니다. 새 콘텐츠를 생성하여 캐시에 씁니다. echo "콘텐츠입니다. <P>";
echo "현재 시간은" . date('MdY H:i:s A', time()) . "<BR>"
// 캐시에 내용을 씁니다. echo $cache->end();
?>
이 두 파일을 각각 새로 고치면 pear_content_cache1.php의 "현재 시간" 줄의 시간이 새로 고침에 따라 변경되는 반면 pear_content_cache2.php의 이 줄은 변경되지 않는 것을 확인할 수 있습니다. 이는 pear_content_cache2.php가 캐싱을 사용하여 사용자가 요청한 콘텐츠를 정적 파일에 저장하기 때문입니다. 사용자가 다시 요청하면 프로그램이 콘텐츠를 동적으로 생성할 필요 없이 파일에서 직접 출력됩니다.
pear_content_cache2.php의 경우, 사용자가 캐시에 있는 이전 정보 대신 최신 정보를 읽고 싶은 경우. 그런 다음 http://…/pear_content_cache2.php?nocache=1을 사용하여 액세스할 수 있으며, 그러면 캐싱 기능이 비활성화됩니다. 새로고침하여 시간이 그에 따라 변경되는지 확인하세요.
PEAR 콘텐츠 캐싱 클래스의 사용을 요약하려면:
1. PEAR 패키지를 포함할 때 올바른 경로를 설정했는지 확인하십시오.
2. Output.php의 캐시 클래스를 포함합니다.
require_once 'Cache/Output.php'
3. 캐시 디렉터리
$cacheDir = './pear_cache'
를 설정하고이 디렉터리에 쓰기가 가능한지 확인하세요. 캐시 데이터는 이 디렉터리의 하위 디렉터리에 기록됩니다.
4. 출력 캐시 객체 생성
$cache = new Cache_Output('file',array('cache_dir' => $cacheDir));
첫 번째 매개변수는 "file" 방법을 기반으로 캐시를 사용함을 나타내고 두 번째 매개변수는 디렉터리와 연결된 캐시 배열입니다.
5. 고유한 캐시 ID 생성
$cache_id = $cache->generateID(array('url' => $_REQUEST,'post' =>$_POST,'cookies' => $HTTP_COOKIE_VARS))
여기서는 $cache 객체의 generateID입니다
.( ) 방법은 이 요청을 고유하게 식별하고 다른 요청과 구별하기 위해 일련의 정보(URL, HTTP POST 데이터 및 HTTP 쿠키)를 제공합니다.
6. 캐시ID에 해당하는 캐시 데이터가 이미 존재하는지 확인하기 위한 논리적 판단문을 추가합니다. 존재하는 경우 데이터를 획득하고 스크립트를 종료합니다.
if ($content = $cache->start($cache_id))
{
$ 내용을 에코;
출구();
}
7. 위의 논리문 뒤에 콘텐츠를 생성하는 코드를 배치하고 캐시 객체 사용을 종료합니다.
echo $cache->end();
함수 캐시 출력 PEAR 캐시
PEAR는 출력 내용을 캐시할 수 있을 뿐만 아니라 특정 함수 호출 결과도 캐시할 수 있습니다. 이것은 매우 흥미로운 기능입니다. 프로그램이 특정 기능을 자주 사용하고 호출 결과가 동일하다면 시도해 볼 것을 제안합니다. 특히 이 기능이 느리게 실행되는 경우에는 더욱 그렇습니다.
다음으로 매우 느리게 실행되는 함수인 SlowFunction()에 대한 버퍼링된 호출을 구현합니다.
<?php
require_once '캐시/Function.php';
$cacheDir = './pear_cache/';
$cache = new Cache_Function('file',array('cache_dir' => $cacheDir));
$arr = array('사과', '배', '수박');
$cache->call('slowFunction', $arr);
echo '<BR>';
$arr = array('사과', '배', '수박');
느린 함수($arr);
함수 느린 함수($arr = null)
{
echo "매우 느리게 실행되는 함수: ( <br>";
echo "현재 시간은" . date('MdY H:i:s A', time()) '<br>';
foreach($arr를 $fruit로)
{
echo "$과일을 먹었습니다 <br>";
}
)
?>
다음은 예제의 스크립트 실행 결과입니다.
현재 시간은 Jul-28-2004 17:15:57 PM입니다
.
사과를 먹었습니다 배를 먹었습니다 수박을 먹었습니다
매우 느리게 실행되는 함수입니다 :(
현재 시간은 2004년 7월 28일 오후 17시 17분 55초입니다.
나는 사과를 먹었다 배를 먹었다 수박을 먹었다
코드에서 Cache/Function.php 클래스는 함수 버퍼링 기능을 수행하는 데 사용됩니다. $cache 변수는 파일 기반 함수 캐싱을 사용하고 $cacheDir 디렉터리에 저장되는 Cache_Function 개체입니다. 함수 호출을 캐시하려면 Cache_Function 개체 $cache의 call() 메서드를 다음과 같이 사용해야 합니다. $cache->call('slowFunction', $arr)
여기서는 SlowFunction() 함수가 호출되고 매개변수는
다음과 같습니다.$arr 배열입니다. 이 함수는 $cacheDir 디렉터리의 파일에 캐시됩니다. 이 함수에 대한 모든 후속 호출은 $cache->call()에 의해 반환된 함수 실행 결과를 갖습니다. 함수 캐싱 및 사용법은 콘텐츠 캐싱과 매우 유사하므로 자세한 내용은 PEAR 매뉴얼을 확인하시기 바랍니다.