CI 묻고 답하기

제목 다시 한번 원인을 알고자 글을 올리게 되었습니다ㅜㅜ
카테고리 CI 2, 3
글쓴이 정수리 작성시각 2016/09/19 09:45:57
댓글 : 7 추천 : 0 스크랩 : 0 조회수 : 16650   RSS

똑같은 문제점으로 계속 글을 올리게 되어 죄송합니다.

 

저번에 특정페이지에서 무한 로딩이 걸린다는 게시글을 올렸습니다.

 

확실히 정리가 되지 않아 다시 한번 정리 후 글을 올리게 되었습니다.

 

문제의 페이지는 일정 관리라는 페이지 입니다.

 

이 페이지에서 출력되는 데이터의 경우 외부서버에 있는 mysql에서 데이터를 가져와 출력을 합니다.

 

이 페이지에 최초접속 시 테이블 형태의 리스트가 출력이 되며

 

각각의 리스트를 클릭하면 ajax를 통해 클릭한 리스트 하단으로 상세 데이터가 출력이 됩니다.

 

그리고 따로 등록버튼이 있어 데이터를 등록을 할수 있구요

 

이게 페이지의 기능입니다.

 

처음 접속시 리스트의 상세정보를 확인하거나 다른 페이지로 이동할때에 아무 문제 없이 잘 넘어 갑니다.

 

하지만 한번씩 다른페이지 이동이나 새로고침, 리스트의 상세정보를 보기 위해 클릭시 

 

로딩 시간이 너무나도 길어집니다;;

 

오래 기다리면 페이지 이동은 됩니다. 리스트 클릭시 상세정보 출력은 오래기다려도 출력이 되는지 확인을 못해봤네요

 

이것도 해보겠습니다.

 

그래서 이전에 글을 올렸을때 답변을 통해 프로파일러로 확인을 해보라고하셔서 

 

일정관리와 관련된 컨트롤러에 부분에 프로파일러를 넣어 확인하였습니다.

 

평균적으로 속도는 0,0xx이렇게 나옵니다.

 

로딩시간이 길어질 때 경우 확인을 해보니 로딩시간에 비해 프로파일러에서 나오는 로딩시간은 정상적일 때랑 별차이가 없더라구요 ㅜㅜ

 

그리고 jquery로 사용한 ajax의 부분의 경우 문제점이 있다는 말씀도 있었는데 이부분의 경우 이 페이지를 만들기전 다른 페이지에서

 

이와 같은 형태로 만들어 리스트 클릭시 상세정보 출력과 다른페이지 이동시 아무 문제가 발생하지 않더라구요 ㅜㅜ

 

유독 이페이지에서만 한번씩 로딩이 길어지는지.. 알수가 없네요 참... 아직 페이지가 완성되지 않았는데 기능을 만들고 확인하려고 하면

 

한번씩 로딩이 길어질때마다 답답하네요 ㅜㅜ

 

이럴때는 어디서 부터 확인을 해야할지 참ㅜ.ㅜ 

 

뷰페이지
<table>
		<tr>
			<input type="hidden" name="gg_pk" value="<?=$gg_pk?>" />
			<td>날짜</td>
			<td>구분</td>
			<td>내용</td>
			<td>처리여부</td>
		</tr>
	<div>
<?php
if(!empty($list)){
$a=1;
	foreach($list as $ck){
		$test;
		switch($ck->ck_pur){
			case 1:
				$test = '할일';
				break;
			case 2:
				$test = '정기점검';
				break;
			case 3:
				$test = '장애';
				break;
			case 4:
				$test = '방문';
				break;
			case 5:
				$test = '예약일';
				break;
		}//swich
		$date = date("m/d", strtotime($ck->ck_gg_da));
?>
		
			<tr id="tr_<?=$a?>">
			<input type="hidden" name="ck_pk" value="<?= $ck->ck_pk?>" />
			<td><p class="ck_info"><?= $date ?></p></td>
			<td><p class="ck_info"><?=$test ?></p></td>
			<td><p class="ck_info"><?=$ck->ck_ct ?></p></td>
			<td>
<?php
if($ck->ck_result==0){
?>
			<select name="ct_result">
					<option value="0" selected="selected">N</option>
					<option value="1" >Y</option>
			</select>
<?php
}else{//$ck->result()
?>
			<select name="ct_result">
					<option value="0">N</option>
					<option value="1"  selected="selected">Y</option>
			</select>
<?php
		}//if문
	
?>		
		</td>
		</tr>
		<tr id="hd_<?=$a?>" style="display:none;">
		<td class="tdst03"></td>
		<td colspan="8" class="tdst05"><div class="test"></div></td>
		</tr>
		
<?php
$a++;
}//foreach	
	}else{
?>
	등록하신 점검내역이 없습니다.
<?php
		}//empty($list)
?>
	</div>
	</table>

 

일정관리와 관련된 컨트롤러
function check_info(){//최초접속시 리스트 출력
			$this->gg_info();
			//$this->output->enable_profiler(TRUE);
			$date =  $this->topmenu();
			//$this->output->enable_profiler(TRUE);
			$this->load->view('gigwan/gg_check_v', $date);
		}

function topmenu(){ //기관에 따른 서브메뉴 url
			$no =  $this->uri->segment(3);//기관pk
				
			$gg_name = $this->uri->segment(4);//기관명

			$gg_pg = $this->uri->segment(5);//프로그램pk
			
			$function = $this->uri->segment(2);//메서드명
	
				switch($function){
					case 'basic_info':
					if(empty($gg_pg)){	
						$date['info'] = $this->Gigwan_m->gigwan_info($no);
						$date['gginfo'] = array('gg_no' => $no,  'gg_name' =>$gg_name);
						return $date;
					}else{
						$date['info'] = $this->Gigwan_m->gigwan_info($no); 
						$date['pact'] = $this->Gigwan_m->gigwan_pact($no);
						$date['gginfo'] = array('gg_no' => $no,  'gg_name' =>$gg_name);
						return $date;
					}
						break;
					case 'pact_info':
						if(empty($gg_pg)){
							$date['info'] = array('result' => 0);
							return $date;
						}else{
						$date['info'] = $this->Gigwan_m->pact_info($no, $gg_pg);
						$date['info2'] = $this->Gigwan_m->pact_info2($no, $gg_pg);
						$date['gginfo'] = array('gg_no' => $no,  'gg_name' =>$gg_name);
						$date['rqinfo'] = $this->Gigwan_m->rqinfo($no);
						return $date;
						}
						break;
					
					case 'uj_info':
						if(empty($gg_pg)){
							$date['info'] = array('result' => 0);
							return $date;
						}else{
					
						$date['info'] = $this->Gigwan_m->pact_info($no, $gg_pg);
						$date['info2'] = $this->Gigwan_m->pact_info2($no, $gg_pg);
						$date['gginfo'] = array('gg_no' =>$no, 'gg_name' =>$gg_name, 'pg_no' =>$gg_pg);
						$date['ujinfo'] = $this->Gigwan_m->uj_info($no);
						$date['memo'] =  $this->Gigwan_m->cf_memo($no);
							return $date;
						}
						break;
					
					case 'server_info':
									
						$date['info'] = $this->Gigwan_m->server_info($no);
						$date['list'] = $this->Gigwan_m->ch_list($no);
						//$date['info2'] = $this->Gigwan_m->sv_lk_info($no, $gg_pg);
						$date['gginfo'] = array('gg_no' =>$no, 'gg_name' =>$gg_name);
						
						return $date;
						break;

						case 'check_info':
							//$this->output->enable_profiler(TRUE);
						$this->load->model('Check_m');	
						//$this->output->enable_profiler(TRUE);
						$date['list'] = $this->Check_m->ck_list($no);
						//$this->output->enable_profiler(TRUE);
						$date['gginfo'] = array('gg_no' =>$no, 'gg_name' =>$gg_name);
						//$this->output->enable_profiler(TRUE);
						return $date;
					break;
				}
jquery
//하나의 리스트 클릭시 하단의 상세정보 출력
$('.ck_info').click(function(){
		var ck_pk = $(this).parents('tr').find('input[name="ck_pk"]').val();

		var no = $(this).parents('tr').attr('id');
			 no = no.split("_")[1];

			 if($('#hd_'+no).css('display') == 'none'){	
				
				$("[id^='hd_']").css("display", "none");
				$('#hd_'+no).css("display", "table-row");

				$.ajax({
					type:'post',
					url:'http://172.19.93.9/jds/index.php/gigwan_c/ck_detail',
					dataType:'json',
					data:{
						ck_pk: ck_pk
					},
					success:function(data){
							var output='<table>';
							output +='<tr>';
							output +='<input type="hidden" name="ck_pk" value="'+data.ck_pk+'" />';
							output +='<td>등록일자</td>';
							output +='<td>'+data.ck_up_da+'</td>';
							output +='<td>처리일자</td>';
							output +='<td>'+data.ck_da+'</td>';
							output +='</tr>';
							output +='<tr>';
							output +='<td>세부내용</td>';
							output +='<td>'+data.ck_de_ct+'</td>';
							output +='<td>백업상태</td>';
							if(data.ck_backup == 0){						
							output +='<td>점검</td>';
							}else{
							output +='<td>확인</td>';
							}
							output +='</tr>';
							output +='<tr>';
							output +='<td>CPU사용량</td>';
							output +='<td>'+data.ck_cpu+'</td>';
							output +='<td>메모리사용량</td>';
							output +='<td>'+data.ck_memory+'</td>';
							output +='</tr>';
							output +='<tr>';
							output +='<td>os업데이트</td>';
							if(data.ck_update == 0){
							output +='<td>N</td>';
							}else{
							output +='<td>Y</td>';
							}
							output +='<td>메모</td>';
							output +='<td>'+data.ck_memo+'</td>';
							output +='</tr>';
							output +='<tr>';
							output +='<td>등록자</td>';
							output +='<td>'+data.ck_up_name+'</td>';
							output +='<td>처리자</td>';
							output +='<td>'+data.ck_pc_name+'</td>';
							output +='</tr>';
							output +='</table>';
							output  +='<input type="button" name="check_modify" value="수정">';
							$('#hd_'+no+' .test').empty();
							$('#hd_'+no+' .test').append(output);
	
						},
					error:function(status, request, error){
					alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error"+error);
					}
				});//ajax
			 
			 }else{
					$('#hd_'+no).hide();

			 }//if			
	});

 

 다음글 Controller의 정보를 전달에 관해 궁금합니다 (4)
 이전글 ci게시판 회원권한 관리 (1)

댓글

kaido / 2016/09/19 11:00:16 / 추천 0

해당 현상에 대해서는 더이상 조언 해 드릴것은 없는 것으로 보입니다.

이 문제는 본인이 푸셔야 합니다. 저희는 직접 볼 수가 없으며, 이런 문제를 푸는게 개발자가 할 일입니다.

 

누누히 말씀드렸지만, ajax가 아닌 그냥 페이지 호출로 정상이면 ajax로도 정상이 맞습니다.

 

외부서버라고 하시는거 보니, 공동작업인것 같은데, 공동작업이 어려운것은 같이 맞춰야 하는 부분이 어려운겁니다.

외부 서버 담당자하고도 이야기해서 푸셔야 합니다.

 

외부로 나가는 서버도 본인이 담당 한다면 로그를 떠서 어디서 뭐가 실행되고 뭐가 트러블을 일으키는지 찾아내셔야 하고요.

로직상의 문제는 아닌것 같습니다.

정수리 / 2016/09/19 11:05:24 / 추천 0

@kaido

답변감사합니다 ㅜㅜ

이제 7개월차 되는 신입이고 비전공이다보니 어려움이 많네요...

회사와서 나름 php공부하고 ci를 알게되어 프로젝트를 진행중인데 ㅜㅜ 현재까지는 어려움이 있으면 포럼를 통해 해결하였는데 

이 문제 직면하니 너무 답답하네요 ㅜㅜ 회사에 사수도 없어서 저혼자 해결하여야 하는데 참...

말씀하신 로그라면 어디쪽 로그를 봐야할까요...

kaido / 2016/09/19 11:11:00 / 추천 0

페이지 호출마다 직접 만들어서 보는 웹로그

아파치 접속 로그

DB 쿼리 실행 로그 [기본은 off  설정을 on 시켜야 함.]

네트워크 상태 확인 [찰스 같은 프로그램이나 크롬의 네트워크 관측 등]

 

관측 할 수 있는 것은 전부 확인해 보세요.

무언가 방해되는 요소가 분명 있을 것입니다.

정수리 / 2016/09/19 12:34:39 / 추천 0

@kaido

답변 감사합니다

말씀하신 부분중에 제가 확인이 가능한것은 직접만들어서 보는 웹로그와 DB쿼리 실행로그 네트워크 상태 확인밖에 없겠네요 ㅜㅜ

아파치의 경우 제가 권한이 없어서 확인이 불가능할 것같구요

페이지 로딩이 길어길 경우 

Unable to select the specified database: jds

Filename: core/Loader.php

Line Number: 339

이런 오류가 발생하는데 이것은 무엇때문에 발생하는 원인인지 알수 있을까요?

 

변종원(웅파) / 2016/09/19 14:47:31 / 추천 0

답은 나와있네요. jds 데이터베이스 연결이 비정상적인거네요.

슬로우쿼리라서 그럴 수도 있고 서버간 연결이 불안정해서 그럴 수도 있고 원인은 다양합니다.

똑같은 쿼리를 jds에 호출하는 프로그램 만들어서 계속 호출해보세요.

정수리 / 2016/09/19 14:59:58 / 추천 0

@변종원

답변 감사합니다..

아직 제가 많이 부족하여 달아주신 답변에 대해 이해가 되지 않네요 ㅜㅜ

똑같은 쿼리를 jds에 호출하는 프로그램 만들어서 계속 호출해보세요.

이 말이 무슨말일까요??

변종원(웅파) / 2016/09/19 15:15:49 / 추천 0

정수리/ 리스트에서는 이상이 없고 ajax 호출할때 느려진다고 했으니 ajax로 호출하는 쿼리를 이야기한겁니다.

따로 컨트롤러, 메소드 만들어서 실행하고 브라우저 개발자도구 네트워크탭에서 각 단계별로 걸리는 시간 체크해보세요.