[펀글] 최신글 함수에 Cache 기능을 넣어보자!
페이지 정보
작성자 차동박 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 댓글 0건 조회 16,055회 작성일 08-04-14 21:13본문
그동안 쭉 도움만 받다가 처음을 글을 올려 봅니다. 모두 잘 부탁드리겠습니다. :)
이 팁은 아주 간단한 방법으로 최신글 출력을 캐싱해서 파일로 저장해 놓는 방법입니다.
보통 메인페이지에 최신글을 많이 쓸경우 DB 접근할때의 부하를 무시할 수 없겠죠. 캐싱을 통해 DB가 아닌 파일로부터 직접 최신글을 받아 좀더 빠른 페이지접근을 할 수 있습니다.
TEAMBH.net 기준 적용 결과
- 최신글 캐싱 적용 전 메인 페이지 로딩속도 : 0.51034808158875 초
- 최신글 캐싱 적용 후 메인 페이지 로딩속도 : 0.024719953536987 초
- 약 20배 정도 빨라졌습니다 :)
경우에 따라선 비효율적 일수도 있습니다. (예: 글이 매우 자주 포스팅되는 게시판, 스킨에서 직접 DB 로부터 실시간데이터를 가져올 경우.)
팁란에 올리기도 뭐한 단순한 코드지만 용기를 내어 올려봅니다 좋은 의견 부탁드리겠습니다.
동작원리
- latest 함수에서 처음 해당 보드의 캐시파일을 찾습니다. 없으면 새로 캐시파일을 만듭니다.
- 캐시파일이 있으면 DB에 접근 하지 않고 캐시파일을 대신 뿌려줍니다.
- 하지만 업데이트 시간이 되면, 캐시파일이 있더라도, 무조건 새로 캐싱합니다. ($update_time 을 수정해 업데이트 시간을 조절할 수 있습니다.)
- 글이나 코멘트가 추가/삭제/수정 되면, 캐시파일을 삭제합니다.
참고
- 캐시파일이 저장되는 곳은 data/cache_latest 입니다.
- 캐시파일 전체 삭제는 rmdir( "$g4[path]/data/cache_latest" ); 처럼 하시면 되겠습니다.
변경해야될 파일
- lib/latest.lib.php
- bbs/delete.php
- bbs/delete_all.php
- bbs/delete_comment.php
- bbs/write_comment_update.php
- bbs/write_update.php
변경 사항
- lib/latest.lib.php
- latest 함수의 global $g4; 아랫줄에 다음을 추가 --> if( $content = open_cache($bo_table) ) return $content;
- latest 함수의 ob_end_clean(); 다음에 다음을 추가 --> write_cache($tmp_write_table,$content);
- latest 함수가 끝나는 곳 } 다음에 다음 함수 을 추가 -->
function write_cache($board_table,$content)
{
global $g4;
if( !is_dir("$g4[path]/cache_latest")
) {
@mkdir("$g4[path]/data/cache_latest",
0707);
@chmod("$g4[path]/data/cache_latest",
0707);
}
$fp =
fopen(
"$g4[path]/data/cache_latest/cache_$board_table.tmp",
'w');
fputs($fp,
$content);
fclose($fp);
}
function open_cache($bo_table)
{
global $g4;
$tmp_write_table
= $g4['write_prefix']
. $bo_table;
// 게시판 테이블 전체이름
// 캐쉬파일이 없으면 무조건 리턴 false
if( !is_file("$g4[path]/data/cache_latest/cache_$tmp_write_table.tmp")
) return false;
// 초단위, 캐쉬 생성이후 지정된 시간이 지나면 무조건 캐쉬 업데이트;
1시간 = 3600초
$update_time
= 3600;
// 현재시간
$time
= time();
// 파일시간
$ftime
= filemtime("$g4[path]/data/cache_latest/cache_$tmp_write_table.tmp");
// 캐쉬파일 생성 이후 흐른시간
$dTime
= $time
- $ftime;
// 업데이트 시간이 만료되면 리턴 false
if( $dTime
>= $update_time
) return false;
// 다음업데이트 시간
$nextUpdate
= date("[Y/m/d
H:i:s]",($ftime
+ $update_time));
// 캐쉬 파일 생성 시간
$ftime
= date("[Y/m/d
H:i:s]",$ftime);
ob_start();
readfile(
"$g4[path]/data/cache_latest/cache_$tmp_write_table.tmp"
);
$content
= ob_get_contents();
ob_end_clean();
return $content
. "<!-- $bo_table :
cached$ftime next$nextUpdate -->";
}
- bbs/write_comment_update.php
- bbs/delete.php
- bbs/delete_all.php
- bbs/delete_comment.php
- 맨 마지막줄 쯤 goto_url 함수 윗줄에 다음을 추가 ( 파일 4개 모두 동일 ) -->
if( is_file("$g4[path]/data/cache_latest/cache_$write_table.tmp") ) unlink("$g4[path]/data/cache_latest/cache_$write_table.tmp");
- bbs/write_update.php
- 맨 마지막줄 쯤 if ($file_upload_msg) 윗줄에 다음을 추가
if( is_file("$g4[path]/data/cache_latest/cache_$write_table.tmp") ) unlink("$g4[path]/data/cache_latest/cache_$write_table.tmp");
마치며
첨부파일
- latest[1].lib.php (2.7K) 27회 다운로드 | DATE : 2008-04-14 21:13:58
관련링크
댓글목록
등록된 댓글이 없습니다.