답변 6개 / 댓글 12개
채택된 답변
+20 포인트
다른 컴으로도 접속해 해당 텀 문제인지 서버 문제인지 체크해 보세요.
서버 문제이면 주소 공개 후 도움을 구하셔야 체크가 가능할 듯 합니다.
답변에 대한 댓글 5개
메인에서 삭제한 함수를 사용하고 계신가요?
해당함수는 모든 게시판의 최신글을 출력하는함수인데
현재 메인에서 불필요한 기능인거같네요
답변에 대한 댓글 2개
현재 뭐가문제인지 추적하고 추적하다보니
function html_purifier($html)
{
$f = file(G5_PLUGIN_PATH.'/htmlpurifier/safeiframe.txt');
$domains = array();
foreach($f as $domain){
// 첫행이 # 이면 주석 처리
if (!preg_match("/^#/", $domain)) {
$domain = trim($domain);
if ($domain)
array_push($domains, $domain);
}
}
// 내 도메인도 추가
array_push($domains, $_SERVER['HTTP_HOST'].'/');
$safeiframe = implode('|', $domains);
include_once(G5_PLUGIN_PATH.'/htmlpurifier/HTMLPurifier.standalone.php');
include_once(G5_PLUGIN_PATH.'/htmlpurifier/extend.video.php');
$config = HTMLPurifier_Config::createDefault();
// data/cache 디렉토리에 CSS, HTML, URI 디렉토리 등을 만든다.
$config->set('Cache.SerializerPath', G5_DATA_PATH.'/cache');
$config->set('HTML.SafeEmbed', false);
$config->set('HTML.SafeObject', false);
$config->set('Output.FlashCompat', false);
$config->set('HTML.SafeIframe', true);
if( (function_exists('check_html_link_nofollow') && check_html_link_nofollow('html_purifier')) ){
$config->set('HTML.Nofollow', true); // rel=nofollow 으로 스팸유입을 줄임
}
$config->set('URI.SafeIframeRegexp','%^(https?:)?//('.$safeiframe.')%');
$config->set('Attr.AllowedFrameTargets', array('_blank'));
//유튜브, 비메오 전체화면 가능하게 하기
$config->set('Filter.Custom', array(new HTMLPurifier_Filter_Iframevideo()));
$purifier = new HTMLPurifier($config);
return $purifier->purify($html);
}
여기서
$purifier = new HTMLPurifier($config);
를 제거하면 문제가 되지않습니다
근데 HTMLPurifier를 검색하면 아무것도 나오지않습니다 이것은 무엇인가요 ?
자체적으로 리로드함수라기에는 P가 대문자로 되어있습니다.
function html_purifier($html)
{
$f = file(G5_PLUGIN_PATH.'/htmlpurifier/safeiframe.txt');
$domains = array();
foreach($f as $domain){
// 첫행이 # 이면 주석 처리
if (!preg_match("/^#/", $domain)) {
$domain = trim($domain);
if ($domain)
array_push($domains, $domain);
}
}
// 내 도메인도 추가
array_push($domains, $_SERVER['HTTP_HOST'].'/');
$safeiframe = implode('|', $domains);
include_once(G5_PLUGIN_PATH.'/htmlpurifier/HTMLPurifier.standalone.php');
include_once(G5_PLUGIN_PATH.'/htmlpurifier/extend.video.php');
$config = HTMLPurifier_Config::createDefault();
// data/cache 디렉토리에 CSS, HTML, URI 디렉토리 등을 만든다.
$config->set('Cache.SerializerPath', G5_DATA_PATH.'/cache');
$config->set('HTML.SafeEmbed', false);
$config->set('HTML.SafeObject', false);
$config->set('Output.FlashCompat', false);
$config->set('HTML.SafeIframe', true);
if( (function_exists('check_html_link_nofollow') && check_html_link_nofollow('html_purifier')) ){
$config->set('HTML.Nofollow', true); // rel=nofollow 으로 스팸유입을 줄임
}
$config->set('URI.SafeIframeRegexp','%^(https?:)?//('.$safeiframe.')%');
$config->set('Attr.AllowedFrameTargets', array('_blank'));
//유튜브, 비메오 전체화면 가능하게 하기
$config->set('Filter.Custom', array(new HTMLPurifier_Filter_Iframevideo()));
$purifier = new HTMLPurifier($config);
return $purifier->purify($html);
}
여기서
$purifier = new HTMLPurifier($config);
를 제거하면 문제가 되지않습니다
근데 HTMLPurifier를 검색하면 아무것도 나오지않습니다 이것은 무엇인가요 ?
자체적으로 리로드함수라기에는 P가 대문자로 되어있습니다.
이미지나 js, css 등의 리소스 파일이 아닌 자체 페이지가 오래 걸린다는 것은,
최종 HTML 출력 전의 PHP-DB 처리단의 시간이 많이 걸린다는 것을 의미합니다.
해당 홈페이지의 게시판이 없는 페이지는 (회사소개 페이지) 로딩속도가 빠른 것으로 보아,
DB 쿼리 시간이 오래 걸리는 것으로 추측됩니다.
메인페이지에서 <제품소개> 슬라이드, 공지사항 최신글등을 빼고 테스트해보면서 문제지점을 찾아나갈 수 있습니다. 가령 <제품소개> 슬라이드 부분이 문제인 경우 해당 SQL문을 개선하거나 관련 DB 처리를 검토해 볼 수 있습니다.
<제품소개> 를 여러 게시판 테이블에서 union all 등의 쿼리로 불러온다면.. 과부하가 생길 수 있습니다.
where 조건에 날짜 조건(가령 최근 5일 이내) 등을 추가하면 개선될 가능성이 있습니다.
답변에 대한 댓글 2개
DB문제인게확실한거같습니다.
function latest_all3($skin_dir="", $bo_table, $rows=10, $subject_len=40, $contents_len=200, $category="", $orderby="", $gall_order="") {
global $config;
global $g5;
$list = array();
$limitrows = $rows;
$sqlgroup = " select bo_table, bo_subject from $g5[board_table] where bo_table LIKE '".$bo_table."%' ".$gall_order." ";
$rsgroup = sql_query($sqlgroup);
if (!$skin_dir) $skin_dir = 'basic';
if(G5_IS_MOBILE) {
$latest_skin_path = G5_MOBILE_PATH.'/'.G5_SKIN_DIR.'/latest/'.$skin_dir;
$latest_skin_url = G5_MOBILE_URL.'/'.G5_SKIN_DIR.'/latest/'.$skin_dir;
} else {
$latest_skin_path = G5_SKIN_PATH.'/latest/'.$skin_dir;
$latest_skin_url = G5_SKIN_URL.'/latest/'.$skin_dir;
}
for ($j=0, $k=0; $rowgroup=sql_fetch_array($rsgroup); $j++) {
$bo_table = $rowgroup[bo_table];
// 테이블 이름구함
$sql = " select * from {$g5[board_table]} where bo_table = '$bo_table' ";
$board = sql_fetch($sql);
$tmp_write_table = $g5[write_prefix] . $bo_table; // 게시판 테이블 실제이름
// 옵션에 따라 정렬
$sql = "select * from $tmp_write_table where wr_is_comment = 0 ";
/*
$sql .= (!$category) ? "" : " and ca_name = '$category' ";
$sql .= (!$orderby) ? " order by wr_id desc " : " order by $orderby desc, wr_id desc ";
*/
$sql .= " order by ".$orderby;
$sql .= " limit $limitrows";
//echo $sql;
$result = sql_query($sql);
for ($i=0; $row = sql_fetch_array($result); $i++, $k++) {
if(!$orderby) $op_list[$k] = $row[wr_datetime];
else {
$op_list[$k] = is_string($row[$orderby]) ? sprintf("%-256s", $row[$orderby]) : sprintf("%016d", $row[$orderby]);
$op_list[$k] .= $row[wr_datetime];
$op_list[$k] .= $row[wr_name];
$op_list[$k] .= $row[wr_10];
}
$list[$k] = get_list($row, $board, $latest_skin_path, $subject_len, $wr_name, $wr_10);
$list[$k][bo_table] = $board[bo_table];
$list[$k][bo_subject] = $board[bo_subject];
$list[$k][wr_name] = $board[wr_name];
$list[$k][wr_10] = $board[wr_10];
$list[$k][bo_wr_subject] = cut_str($board[bo_subject] . $list[$k][wr_subject], $subject_len, $wr_name, $wr_10);
}
}
if($k>0) array_multisort($op_list, SORT_DESC, shuffle($list));
if($k>$rows) array_splice($list, $rows);
ob_start();
include $latest_skin_path.'/latest.skin.php';
$content = ob_get_contents();
ob_end_clean();
return $content;
}
이부분을 제거하면 렉이안걸립니다.
이부분에서 문제될만한게 있을까요 ?
function latest_all3($skin_dir="", $bo_table, $rows=10, $subject_len=40, $contents_len=200, $category="", $orderby="", $gall_order="") {
global $config;
global $g5;
$list = array();
$limitrows = $rows;
$sqlgroup = " select bo_table, bo_subject from $g5[board_table] where bo_table LIKE '".$bo_table."%' ".$gall_order." ";
$rsgroup = sql_query($sqlgroup);
if (!$skin_dir) $skin_dir = 'basic';
if(G5_IS_MOBILE) {
$latest_skin_path = G5_MOBILE_PATH.'/'.G5_SKIN_DIR.'/latest/'.$skin_dir;
$latest_skin_url = G5_MOBILE_URL.'/'.G5_SKIN_DIR.'/latest/'.$skin_dir;
} else {
$latest_skin_path = G5_SKIN_PATH.'/latest/'.$skin_dir;
$latest_skin_url = G5_SKIN_URL.'/latest/'.$skin_dir;
}
for ($j=0, $k=0; $rowgroup=sql_fetch_array($rsgroup); $j++) {
$bo_table = $rowgroup[bo_table];
// 테이블 이름구함
$sql = " select * from {$g5[board_table]} where bo_table = '$bo_table' ";
$board = sql_fetch($sql);
$tmp_write_table = $g5[write_prefix] . $bo_table; // 게시판 테이블 실제이름
// 옵션에 따라 정렬
$sql = "select * from $tmp_write_table where wr_is_comment = 0 ";
/*
$sql .= (!$category) ? "" : " and ca_name = '$category' ";
$sql .= (!$orderby) ? " order by wr_id desc " : " order by $orderby desc, wr_id desc ";
*/
$sql .= " order by ".$orderby;
$sql .= " limit $limitrows";
//echo $sql;
$result = sql_query($sql);
for ($i=0; $row = sql_fetch_array($result); $i++, $k++) {
if(!$orderby) $op_list[$k] = $row[wr_datetime];
else {
$op_list[$k] = is_string($row[$orderby]) ? sprintf("%-256s", $row[$orderby]) : sprintf("%016d", $row[$orderby]);
$op_list[$k] .= $row[wr_datetime];
$op_list[$k] .= $row[wr_name];
$op_list[$k] .= $row[wr_10];
}
$list[$k] = get_list($row, $board, $latest_skin_path, $subject_len, $wr_name, $wr_10);
$list[$k][bo_table] = $board[bo_table];
$list[$k][bo_subject] = $board[bo_subject];
$list[$k][wr_name] = $board[wr_name];
$list[$k][wr_10] = $board[wr_10];
$list[$k][bo_wr_subject] = cut_str($board[bo_subject] . $list[$k][wr_subject], $subject_len, $wr_name, $wr_10);
}
}
if($k>0) array_multisort($op_list, SORT_DESC, shuffle($list));
if($k>$rows) array_splice($list, $rows);
ob_start();
include $latest_skin_path.'/latest.skin.php';
$content = ob_get_contents();
ob_end_clean();
return $content;
}
이부분을 제거하면 렉이안걸립니다.
이부분에서 문제될만한게 있을까요 ?
* 불러오려는 게시판이 10개인 경우, 10개의 게시판을 각각 불러온 뒤, 종합해서 최신글을 추출하는 방식이기 때문에.. 볼러오는 게시판 숫자가 많아질수록 느려질 수 밖에 없는 구조입니다.
=> 뷰 사용을 검토해 볼 수 있습니다.
* $sql .= " order by ".$orderby;
전에
$orderby = "wr_id desc";
를 추가해주는 것이 좋아 보입니다.
* /lib/latest.lib.php latest() 함수를 참고하여,
캐시를 사용하는 방식으로 적용하는 것이 좋을 것 같습니다.
(캐시 갱신 주기를 1시간 적용인 경우, 1시간에 1번만 sql 실행하고, 그 외는 저장된 캐시파일 내용 그대로 출력)
=> 뷰 사용을 검토해 볼 수 있습니다.
* $sql .= " order by ".$orderby;
전에
$orderby = "wr_id desc";
를 추가해주는 것이 좋아 보입니다.
* /lib/latest.lib.php latest() 함수를 참고하여,
캐시를 사용하는 방식으로 적용하는 것이 좋을 것 같습니다.
(캐시 갱신 주기를 1시간 적용인 경우, 1시간에 1번만 sql 실행하고, 그 외는 저장된 캐시파일 내용 그대로 출력)
파비콘빼고도 문제가 있는거보면 메인호출할때 머가 돌긴도나본데요
저는 메인만 느리고 서브페이지들은 무난하게 들어가지네요
파비콘 문제보단... db.optimize 문제같은데요. 페이지 이동할때마다 속도가 오래걸리네요.
답변을 작성하려면 로그인이 필요합니다.




주소는 http://taesungjm.edenstore.co.kr/ 입니다.