2009-05-19 3 views
2

동적 인 PHP 페이지 캐싱에 대해 궁금합니다. PHP 코드를 미리 컴파일하고 바이트 코드로 저장하는 것입니까? Python의 .pyc와 비슷한 점은 더 컴파일되고 실행 가능한 버전이므로 시스템에서 .pyc 파일이 .py 파일보다 새로운 것으로 확인되면 .py 파일로 다시 컴파일해야 할 필요가 없습니다. .누군가 동적 PHP 페이지 캐싱에 대해 설명 할 수 있습니까?

PHP는 주로 이것에 대해 캐싱을합니까? 누군가 이것에 대한 정보를 조금 더 제공 할 수 있습니까?

답변

3

당신이 말하는 캐싱의 유형에 따라 다릅니다. Opcode 캐싱은 말하는 것과 똑같습니다. op 코드를 취하여 캐시하므로 사용자가 특정 페이지를 방문 할 때마다 해당 opcode가 이미 컴파일되고 캐시에있는 경우 해당 페이지를 다시 컴파일 할 필요가 없습니다. PHP 파일을 수정하면 캐싱 메커니즘이이를 감지하고 코드를 다시 컴파일하여 캐시에 저장합니다.

페이지 자체에 데이터를 캐싱하는 것에 대해 이야기하는 경우이 모든 것이 다른 것입니다.

opcode 캐싱에 대한 자세한 내용은 Alternative PHP Cache을 참조하십시오.

+0

그래서 내 명령 프롬프트에서 PHP 프로그램을 실행하면 컴파일 할 필요가없는 다음 번에 미리 컴파일 된 버전이 생성되도록 요청할 수 있습니까? –

+0

"페이지 자체에 데이터 캐싱"은 PHP 페이지의 동적 콘텐츠가 아닙니다. 동적 콘텐츠를 어떻게 캐싱 할 수 있습니까? –

+0

실행중인 것을 캐시하기 위해 특정 PHP 액셀러레이터를 설정해야합니다. 그러나 본질적으로 그렇습니다.자세한 방법은 가속기 설명서를 참조하십시오. –

2

설명하는 내용은 PHP accelerator이며 정확히 말한대로합니다. 동일한 스크립트를 여러 번 실행하면 컴파일이 하나만 필요하므로 캐시 된 컴파일 된 바이트 코드를 저장하십시오.

PHP 스크립트 실행 결과를 캐시 할 수도 있습니다. 캐시 된 이후 페이지의 내용이 변경되었을 수 있으므로 일반적으로 최소한 논리가 필요합니다. 예를 들어, general cache feature provided by CodeIgniter을 살펴볼 수 있습니다.

0

실제로는 몇 가지 다른 형태의 캐싱이 있습니다. 당신이 말하는 것은 eAccelerator, MMCache 등과 같은 패키지로 처리됩니다.

실제로는 HTML 출력을 실제로 캐싱하는 것이 도움이 될 수도 있지만 캐싱에도 도움이 될 것입니다. 반복 쿼리에 대한 DB 결과 집합 (memcache과 같은 값)

opcode 캐시 메커니즘을 설치하는 것은 매우 쉽지만 참조 된 다른 두 영역의 캐시를 사용하면 훨씬 더 큰 성능 이점을 얻을 수 있습니다.

1

Peter D's answer은 opcode 캐싱을 잘 다룹니다. 페이지가 단순하면 페이지 생성 시간의 50 % 이상 (주관적)을 절약 할 수 있습니다!

다른 캐싱은 데이터 캐싱입니다. 캐싱 데이터베이스 결과 집합, 웹 서비스 응답, HTML 덩어리 또는 전체 페이지 일 수 있습니다!

간단한 '예'설명해야합니다

$cache = new Cache(); 
    $dataset; 

    if (!$dataset == $cache->get('expensiveDataset')){ 

     //run code to fetch dataset from database 
     $dataset = expensiveOperation(); 
     $cache->set('expensiveDataset', $dataset); 

    } 
echo $dataset; //do something with the data 

객체, 기능과 페이지 레벨 캐싱에 도움이 라이브러리가 있습니다. Zend Framework's Zend_Cache 구성 요소는 사용자가 보는 것을 좋아하면 생각을위한 음식이며 훌륭한 구현입니다.

관련 문제