88 에서 19
도무지 이해할 수 없는 인덱스에서 40쿼리, 코멘트가 10개 넘으면 90에 가까운 쿼리.... 혹시 스킨 문제일까 싶어서 다른 스킨으로 테스트해도 똑같은 쿼리. 그러면 스킨 문제가 아니라 플러그인 문제일텐데. 도대체 뭐가 그렇게 잡아 먹는 것일까. 문제는 mediawiki 문법 플러그인과 whisper 플러그인. DB 엄청나게 잡아먹는다. whisper는 아직 기능이 제대로 되지 않아서 사용하다 말았지만, mediawiki는 버리고 싶지 않아! 그러나 문제는 의외로 간단하게 해결함. DB 건드리는 부분을 /* 주석 */ 처리(혹은 삭제)하면 오케이. 왜 DB를 건드리도록 했는지 모르겠지만 이렇게 기능하지 않도록 해두면 DB 절대 안 잡아 먹는다. 대신, 간단한 핵으로 플러그인을 수정해야 함. (핵에 있는 함수는 기존 함수이므로 찾아서 고친다.)
function wpwiki($content) {
/*
global $wpdb;
$hash_str = "";
$res = $wpdb->get_row("SELECT ID, post_title FROM $wpdb->posts WHERE post_content = '".addslashes($content)."'");
if ($res) { // a post
$hash_str = "_".$res->ID."_".$res->post_title;
}
else { // a comment
$comment_id = $wpdb->get_var("SELECT comment_ID FROM $wpdb->comments WHERE comment_content = '".addslashes($content)."'");
$hash_str = "_".$comment_ID."_".$content;
}
$id_prefix = '_'.md5($hash_str).'_';
*/
//$wpwiki = new WikiText($id_prefix);
$wpwiki = new WikiText();
$ret = $wpwiki->transform("n".$content."n");
return $ret;
}
혹시라도 활성화시킨 플러그인의 코드를 테마에 삽입할 때에 <?php 함수A(); ?>라고 쓴다. 그런데
<?php if (function_exists('함수A')) {
함수A();
} ?>
라고 해주면 나중에 혹시라도 생길 수 있는 에러에 대비할 수 있다. 물론 함수A 가 있으면 함수A 를 실행하라는 뜻이다. 예를 들어, 코멘트를 수정할 수 있게 해주는 Edit comment 플러그인를 쓰면서 코멘트 루프 안에 코멘트 Edit 링크를 삽입하면 기존에 쓰고 있던 관리자용 Edit 링크를 쓰지 않아도 된다. 그럼 플러그인과 함께 사용하는 Edit 링크 표시는 <?php jal_edit_comment_link('Edit',' | ','',' | Editing now'); ?> 이런 식이다. 이걸 다음처럼 바꿔주면, 플러그인을 사용할 때와 하지 않을 때 호환이 되겠다.
<?php if (function_exists('jal_edit_comment_link')) {
jal_edit_comment_link('Edit',' | ','',' | Editing now');
} else { // 플러그인을 사용하지 않을 때는 기존의 링크 함수 사용
edit_comment_link('(Edit)', ' | ', '');
} ?>
이걸 왜 말하고 있느냐면, 플러그인 다 닫고 뭐가 디비를 90번이나 건드리는지 검사해볼 때 이렇게 하니까 좋더라고. (물론 개발자님들은 상식이겠지만.)
nmind wrote:
아...너무 어려워요..;;
"88 에서 19"
꼭 암호문 같습니다:-)
¶ Posted September 4th, 2006 at 21:15
she wrote:
좀 그렇죠. 제가 프로그래밍이 신기하고 그래서 ^^;; 이제 코멘트 불러올 때 쓸데없는 딜레이는 없을 거에요. ^^; 종전까지는 디비를 90번 호출했더니 약간 딜레이가 있었거든요.
¶ Posted September 4th, 2006 at 21:29