메인페이지 로딩 지연현상

메인페이지 로딩 지연현상

QA

메인페이지 로딩 지연현상

본문

3731834642_1606895883.8523.png

 

메인페이지가 로딩이 너무느려서 네트워크를 확인해보니

 

도메인주소가 22초걸리고 다른것은 제대로 정상작동잘되었습니다.

 

도메인 주소가 22초나 걸릴이유가 무엇이있을까요 ?

 

이미지도 별로없고 잘나오던것이 갑자기 느려졌습니다

 

3731834642_1606895984.0439.png

 

오늘 방문자도 많지않습니다.

 

https://gtmetrix.com/ 에서 검색시 이렇게 나옵니다.

 

3731834642_1606896067.8364.png

 

3731834642_1606896097.4356.png

이 질문에 댓글 쓰기 :

답변 6

다른 컴으로도 접속해 해당 텀 문제인지 서버 문제인지 체크해 보세요.

서버 문제이면 주소 공개 후 도움을 구하셔야 체크가 가능할 듯 합니다.

루트에 있는 파비콘 제거 (또는 교체)해보세요.
그게 제일 오래 걸리네요.

ps.
아래 사이트에서 이미지 용량도 줄여 올려보시구요.
https://tinypng.com/

서버 사양이 그리 안 좋을 땐, 메인 이미지 노출은 최소화하는게 좋아요.
제 서버도 구려서, 이미지는 로고 빼고 사용 않습니다. ㅋ

혹시 파비콘이 문제인지 알아낸방법이 무엇인지 알수있을까요? 알아둬야 다음번에 이런질문안하고 안헤맬수있을거같습니다. 네트워크로 확인해도 파비콘에 관한건 뜨지않습니다.


그리고 index haed sub tail 전부 컨트롤 f로 favicon 을 찾아보는데 favicon은 하나도 찾을수 없었습니다. 로그된 페이지에서도 response로 favicon 검색해도 나오지가않습니다.

크롬 > F12키 > NETWORK 탭에서 요소별 로드 속도 확인 가능합니다.
아마도 파비콘 관련 코드가 상단에 위치하는데,
없는 걸 찾느라,,,,오래 걸리는 듯 합니다.

heAD 부분에 INCLUDE 중
LATEST.LIB.PHP를 제거하면 렉이사라집니다.

그래서
include_once(G5_LIB_PATH.'/latest.lib.php');

여기로 들어가서 컨트롤f로 favi를 쳐보았지만 나오지않습니다. 최신글에 파비콘이 있을수가있나요?

파비콘이 페이지로 불려오는데

이미지로 제대로 올라갔는지 확인해보세요

혹시 파비콘이 문제인지 알아낸방법이 무엇인지 알수있을까요? 알아둬야 다음번에 이런질문안하고 안헤맬수있을거같습니다. 네트워크로 확인해도 파비콘에 관한건 뜨지않습니다.

파비콘 문제보단... db.optimize 문제같은데요. 페이지 이동할때마다 속도가 오래걸리네요.

파비콘빼고도 문제가 있는거보면 메인호출할때 머가 돌긴도나본데요

저는 메인만 느리고 서브페이지들은 무난하게 들어가지네요

이미지나 js, css 등의 리소스 파일이 아닌 자체 페이지가 오래 걸린다는 것은,

 

최종 HTML 출력 전의 PHP-DB 처리단의 시간이 많이 걸린다는 것을 의미합니다.

 

해당 홈페이지의 게시판이 없는 페이지는 (회사소개 페이지) 로딩속도가 빠른 것으로 보아,

 

DB 쿼리 시간이 오래 걸리는 것으로 추측됩니다.

 

메인페이지에서 <제품소개> 슬라이드, 공지사항 최신글등을 빼고 테스트해보면서 문제지점을 찾아나갈 수 있습니다. 가령 <제품소개> 슬라이드 부분이 문제인 경우 해당 SQL문을 개선하거나 관련 DB 처리를 검토해 볼 수 있습니다.

 

<제품소개> 를 여러 게시판 테이블에서 union all 등의 쿼리로 불러온다면.. 과부하가 생길 수 있습니다.

where 조건에 날짜 조건(가령 최근 5일 이내) 등을 추가하면 개선될 가능성이 있습니다.

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;


}


이부분을 제거하면 렉이안걸립니다.

이부분에서 문제될만한게 있을까요 ?

* 불러오려는 게시판이 10개인 경우, 10개의 게시판을 각각 불러온 뒤, 종합해서 최신글을 추출하는 방식이기 때문에.. 볼러오는 게시판 숫자가 많아질수록 느려질 수 밖에 없는 구조입니다.
=> 뷰 사용을 검토해 볼 수 있습니다.

* $sql .= " order by ".$orderby;
전에
$orderby = "wr_id desc";
를 추가해주는 것이 좋아 보입니다.

* /lib/latest.lib.php latest() 함수를 참고하여,
캐시를 사용하는 방식으로 적용하는 것이 좋을 것 같습니다.
(캐시 갱신 주기를 1시간 적용인 경우, 1시간에 1번만 sql 실행하고, 그 외는 저장된 캐시파일 내용 그대로 출력)

메인에서 삭제한 함수를 사용하고 계신가요?

해당함수는 모든 게시판의 최신글을 출력하는함수인데

 

현재 메인에서 불필요한 기능인거같네요

현재 뭐가문제인지 추적하고 추적하다보니

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가 대문자로 되어있습니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 123,117 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT