1. lib/model/entry.php ==> getEntryListByCategory 함수 수정
기존
function getEntryListByCategory($owner, $category) {
global $database;
if ($category === null)
return array();
if ($category > 0) {
$categories = fetchQueryColumn("SELECT id FROM {$database['prefix']}Categories WHERE owner = $owner AND parent = $category");
array_push($categories, $category);
$cond = 'AND category IN (' . implode(', ', $categories) . ')';
} else
$cond = 'AND category >= 0';
$visibility = doesHaveOwnership() ? '' : 'AND visibility > 0';
$sql = "SELECT * FROM {$database['prefix']}Entries WHERE owner = $owner AND draft = 0 $visibility $cond ORDER BY published DESC";
return fetchQueryAll($sql);
}
변경 : content를 제외한 데이터만 배열로 만든다.
function getEntryListByCategory($owner, $category) {
global $database;
if ($category === null)
return array();
if ($category > 0) {
$categories = fetchQueryColumn("SELECT id FROM {$database['prefix']}Categories WHERE owner = $owner AND parent = $category");
array_push($categories, $category);
$cond = 'AND category IN (' . implode(', ', $categories) . ')';
} else
$cond = 'AND category >= 0';
$visibility = doesHaveOwnership() ? '' : 'AND visibility > 0';
$sql = "SELECT owner,id,draft,visibility,category,title,slogan,
location,password,acceptComment,acceptTrackback,
published,created,modified,comments,trackbacks
FROM {$database['prefix']}Entries WHERE owner = $owner AND draft = 0 $visibility $cond ORDER BY published DESC";
return fetchQueryAll($sql);
}
2. lib/piece/blog/list.php 수정
기존
<?
if (isset($list)) {
$listView = $skin->list;
$itemsView = '';
foreach ($list['items'] as $item) {
$itemView = $skin->listItem;
dress('list_rep_regdate', Timestamp::format3($item['published']), $itemView);
dress('list_rep_link', "$blogURL/" . ($blog['useSlogan'] ? "entry/{$item['slogan']}" : $item['id']), $itemView);
dress('list_rep_title', htmlspecialchars($item['title']), $itemView);
if ($item['comments'] > 0)
dress('list_rep_rp_cnt', "({$item['comments']})", $itemView);
$itemsView .= $itemView;
}
dress('list_rep', $itemsView, $listView);
dress('list_conform', htmlspecialchars($list['title']), $listView);
dress('list_count', count($list['items']), $listView);
dress('list', $listView, $view);
}
?>
변경 : dress함수의 잦은 호출로 인한 오버헤드 증가해결 및 중복스킨호출 수정
<?
if (isset($list)) {
$listView = $skin->list;
$itemsView = '';
foreach ($list['items'] as $item) {
$lo_src = array(
"[##_list_rep_regdate_##]",
"[##_list_rep_link_##]",
"[##_list_rep_title_##]",
"[##_list_rep_rp_cnt_##]"
);
$lo_tar = array(
Timestamp::format3($item['published']),
"$blogURL/" . ($blog['useSlogan'] ? "entry/{$item['slogan']}" : $item['id']),
htmlspecialchars($item['title']),
($item['comments'] > 0) ? "(".$item['comments'].")" : ""
);
$itemView = str_replace($lo_src,$lo_tar,$skin->listItem);
unset($lo_src);
unset($lo_tar);
$itemsView .= $itemView;
}
dress('list_rep', $itemsView, $listView);
dress('list_conform', htmlspecialchars($list['title']), $listView);
dress('list_count', count($list['items']), $listView);
dress('list', $listView, $view);
}
?>
수정해서 sandBox에 반영했습니다. 첫경험(??)이라 부족한 부분이 많습니다.
아래는 커밋로그 입니다.
포럼 http://www.tattertools.com/ko/forum/viewtopic.php?id=171
카테고리목록을 가져올때 내용까지 가져와서 배열로 저장함에따라
글수와 상관없이 글내용이 많을경우 overflow 발생및 timeout발생
getEntryListByCategory 함수를 수정하여 content는 가져오지않는다.
스킨변환부분 dress함수의 잦은 호출로 인하 오버헤드증가및 스킨중복
호출수정 한번만 불러와서 전체를 변경한다.
글많이 등록되어 있으신분들 테스트 해보세요. 전 뉴스긁어와서 9999개정도
등록하고 테스트 해봤습니다.
