포럼
질답게시판에 답을 하면서 몇가지 개선점이 있는것 같아서 글 올립니다.
2014.03.14 17:45
저도 경험한 것이지만
documents 테이블을 목록에서 불러올때 굳이 게시판 정보에 설정한 선별된 목록에서 불러와야 하는지 의문 입니다.
어차피 한페이지에 보이는 목록 갯수(기본 20개)는 정해져 있는 상황에서
선별해서 불러오는것과 전체를 불러오는것과 차이가 있는지 검토가 필요한것 같습니다.
본문이 이해가 안되신다고 해서 추가 합니다.
board.view.php 에서
목록 불러올때 아래의 _makeListColumnList()를 호출후 얻어진 $this->columnList 항목만 documents 테이블에서 가져와 목록에 뿌려줍니다.
_makeListColumnList() 과정을 거치는 것과 그냥 documents 테이블의 모든 필드를 가져오는것과 속도면에서 차이가 없을것 같다는 것입니다.
왜냐하면 통상 우리가 목록에 가져오는 row의 갯수가 통상 20개 수준이기 때문에 그 차이가 무시할 수 있는 수준일것으로 예상됩니다.
오히려 선별해서 목록을 뿌려주다보니 스킨 작업시 목록에서 선정되지 않은 항목은 표시할 수 없어서 다시 목록에서 선정해줘야하는 문제들이 발생하고 있습니다.
function _makeListColumnList()
{
$configColumList = array_keys($this->listConfig);
$tableColumnList = array('document_srl', 'module_srl', 'category_srl', 'lang_code', 'is_notice',
'title', 'title_bold', 'title_color', 'content', 'readed_count', 'voted_count',
'blamed_count', 'comment_count', 'trackback_count', 'uploaded_count', 'password', 'user_id',
'user_name', 'nick_name', 'member_srl', 'email_address', 'homepage', 'tags', 'extra_vars',
'regdate', 'last_update', 'last_updater', 'ipaddress', 'list_order', 'update_order',
'allow_trackback', 'notify_message', 'status', 'comment_status');
$this->columnList = array_intersect($configColumList, $tableColumnList);
if(in_array('summary', $configColumList)) array_push($this->columnList, 'content');
// default column list add
$defaultColumn = array('document_srl', 'module_srl', 'category_srl', 'lang_code', 'member_srl', 'last_update', 'comment_count', 'trackback_count', 'uploaded_count', 'status', 'regdate', 'title_bold', 'title_color');
//TODO guestbook, blog style supports legacy codes.
if($this->module_info->skin == 'xe_guestbook' || $this->module_info->default_style == 'blog')
{
$defaultColumn = $tableColumnList;
}
if (in_array('last_post', $configColumList)){
array_push($this->columnList, 'last_updater');
}
// add is_notice
if ($this->except_notice)
{
array_push($this->columnList, 'is_notice');
}
$this->columnList = array_unique(array_merge($this->columnList, $defaultColumn));
// add table name
foreach($this->columnList as $no => $value)
{
$this->columnList[$no] = 'documents.' . $value;
}
}
댓글 4
-
GG
2014.03.14 21:50
본문이 잘 이해되지 않습니다 -
銀童
2014.03.15 19:54
저도 굳이 필요없다고 생각합니다. +1
특히 캐싱등에 쓸데없는 캐시 key 길이의 증가를 야기하고있지요.
-
GG
2014.03.15 23:02
아... 저 목록에 없는 항목을 사용하는 경우가 있으시군요..
-
마이웹
2014.03.15 23:16
개발자 입장에서는 많죠 ^^
저는 디자이너는 아니지만 스킨에 목록중의 항목을 불러오는데 값이 없어서 한참 디버깅한 경험이 있습니다.
알고 봤더니 게시판 정보에서 설정한 목록만 불러오게 되어 있더군요.
제가 DB전문가가 아니라 정확하게는 모르겠지만
documents 테이블의 필드 전체를 불러오는것과 일부 필드를 불러오는것 사이에 속도의 차이가 얼마나 있는지 의문입니다.