2013-09-30 2 views
0

캐싱의 주요 목적 중 하나는 리소스를 절약하는 것이고 요청할 때마다 데이터베이스에 영향을주지 않는 것입니다. 이것에 비추어 볼 때, 나는 모든 Codeigniter가 컨트롤러에서 cache() 문을 만날 때 혼란 스럽습니다. 예를 들어Codeigniter 출력 캐시 : 호출 된 컨트롤러 함수의 어떤 부분이 실행됩니까?

:

$this->output->cache(5); 

$data=$this->main_model->get_data_from_database(); 

$this->load->view("main/index", $data); 

내가 캐시 main/index html 파일이 다음 5 분 동안 표시되지만이 오분 동안 컨트롤러가 여전히 get_data_from_database() 단계를 실행 실현? 아니면 그냥 건너 뛰겠습니까?

참고 : the Codeigniter documentation은 컨트롤러 기능의 어느 곳에서나 cache() 문을 넣을 수 있다고 말합니다. 이는 실행되는 것에 대해 더욱 혼란스럽게합니다.

답변

1

나는 내 자신의 질문에 대답 할 수있다. 캐시 된 출력 이외의 컨트롤러 기능에서 NOTHING은 캐시가 설정된 시간 동안 실행됩니다.

직접 테스트하려면 데이터베이스 INSERT 또는 어떻게 든 기록되는 (예 : 빈 파일에 쓰기) 데이터베이스를 수행하십시오.

다음 코드를 내 cache() 문 아래에 추가했으며 컨트롤러 기능을 처음로드 할 때 some_table 테이블에만 삽입했으며 두 번째 시간 (5 분 범위 내)이 아닐 때만 삽입했습니다.

$this->db->insert('some_table', array('field_name' => 'value1')); 
1

이것은 컨트롤러에서 프로파일 러를 활성화하고 쿼리가 완료되었는지 확인하는 것이 가능하다고 생각합니다. 프로덕션 환경에서이 옵션을 사용하는 경우에는 IP 용으로 만 활성화되어 있는지 확인하십시오.

$this->output->enable_profiler(TRUE); 

- 편집 - 1

이 한 번만 표시됩니다. 캐시 된 페이지가 저장되고 나면 프로필 결과가 다시 표시되지 않으므로 파일을 삭제하고 페이지를 새로 고침 할 수 있습니다.

- 편집 2 -

당신은 또한 사용할 수 있습니다 :

모델 내부
log_message('info', 'message'); 

, 다음 3, config.php 파일에서 $의 설정 [ 'log_threshold를'] 변경하고 로그를 확인 파일.

- EDIT 3 - 데이터베이스 캐시를 활성화하지 않는 한 반드시 선택

이 수행됩니다. 이 경우 캐시 폴더에 데이터베이스 선택 항목이 캐시 된 것을 볼 수 있습니다.

+0

예. 프로필러는 한 번만 사용할 수 있습니다. 얼마나 도움이 될지 모르겠습니다. 큰 문제는'cache'가 활성화되었을 때 ** 2nd ** 시도에서 어떤 일이 일어나고 있는지를 아는 것입니다. –

+1

실제로. 가장 좋은 해결책은'get_data_from_database();'메서드 내에서'log_message ('info', 'message');를 사용하는 것입니다. – Irimia

관련 문제