메뉴 건너뛰기

Karma's Place

로그인하지 않고 댓글을 달 수 있습니다. 하지만 본사이트의 취지에 맞지않는 댓글은 예고없이 삭제될 수 있습니다.
Rhymix & XE
2011.03.15 13:08

XE 속도 개선을 위한 위젯 수정법

조회 수 50095 추천 수 0 댓글 1
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 게시글 수정 내역 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 게시글 수정 내역 댓글로 가기 인쇄
최근 XE의 속도문제가 자주 거론되고 있습니다.

BackupXE 작업을 하면서 몇가지 확인한 것이 있는데 그중 첫번째가 메모리입니다.
XE가 구동하는데 메모리를 많이 소모합니다.
따라서 서버의 자원이 넉넉하고 동접자숫자가 많지 않은 사이트는 속도가 느리다는 느낌이 별로 없습니다.
하지만 동접자 숫자가 많아지고 메모리압박이 가해지면 속도는 현저히 떨어지게 됩니다.

두번째도 결국 같은 맥락이지만 executeQuery() 문제입니다.
XE는 여러가지의 DBMS를 지원하고 있습니다.
이 여러가지의 DB를 지원하기 위해서 쿼리때 낭비되는 리소스가 생길 수 밖에 없습니다.
물론 다른 속도빠른 CMS처럼 달랑 Mysql만 지원하는 구조로 바뀐다면 당근 속도도 빨라질겁니다.
하지만 이런 구조변경은 간단한 작업이 아닙니다.

사용자 입장에서 보면 여러개의 DB를 지원한다고 해도 실제 사용하는 DB는 한가지입니다.
결국 자신이 사용하는 DB에 최적화된 위젯을 만든다면 속도는 현저히 빨라지게 될겁니다.
따라서 가장 많은 사용자들이 사용하고 있는 Mysql을 기준으로 위젯수정법을 알려드리겠습니다.

미리 말씀드리지만 이렇게 수정된 위젯은 다른 DB를 사용하는 사이트에서는 작동하지 않습니다.
따라서 범용 위젯으로 배포하는데도 한계가 있을 수밖에 없습니다.

우선 가장 간단하면서도 가장 많이 사용하는 문서출력위젯입니다.
최근글 위젯을 다운받아서 설치합니다. 아마도 대개는 다운받지 않아도 이미 설치되어있을 가능성이 높아보입니다만... 좌우간...
http://www.xpressengine.com/index.php?mid=download&package_srl=18324344

./widgets/newest_document/newest_document.class.php만 수정하면 됩니다.

원본의 코드는 다음과 같습니다.
 $output = executeQueryArray('widgets.newest_document.getNewestDocuments', $obj);

// document 모듈의 model 객체를 받아서 결과를 객체화 시킴
$oDocumentModel = &getModel('document');

// 오류가 생기면 그냥 무시
if(!$output->toBool()) return;

// 결과가 있으면 각 문서 객체화를 시킴
$modules = array();
if(count($output->data)) {
foreach($output->data as $key => $attribute) {
.
.
이하생략

위의 코드를 다음과 같이 수정합니다.

 /*
$output = executeQueryArray('widgets.newest_document.getNewestDocuments', $obj);
*/
//여기부터 Mysql 전용코드
$oDB=&DB::getInstance();
$sql = sprintf("select modules.site_srl as `site_srl`,modules.mid as `mid`,documents.* from `%smodules` as modules,`%sdocuments` as documents where (documents.module_srl in (%s) and modules.module_srl = documents.module_srl) order by %s %s limit 0, %s",$oDB->prefix, $oDB->prefix,$args->module_srls,$obj->sort_index,$obj->order_type,$obj->list_count);

$result = $oDB->_query($sql);
$output = $oDB->_fetch($result);
//이하 $output->data 구문을 $output으로 수정
// 여기까지 추가...

// document 모듈의 model 객체를 받아서 결과를 객체화 시킴
$oDocumentModel = &getModel('document');

// 오류가 생기면 그냥 무시
//if(!$output->toBool()) return; //이건 삭제...

// 결과가 있으면 각 문서 객체화를 시킴
$modules = array();
if(count($output)) { //$output->data를 $output으로
foreach($output as $key => $attribute) { //$output->data를 $output으로
.
.
이하생략



다시 정리를 하자면 
$output = executeQueryArray('widgets.newest_document.getNewestDocuments', $obj);
로 데이터를 가져오는  부분은
sql문을 직접 입력해서 $oDB->_query() 로 가져오게 수정하는 것입니다.
따라서 $output->toBool() 부분을 삭제 또는 주석처리해야하고
후에 데이터를 처리하는 부분에서 $output->data를 $output 으로 수정해줘야합니다.

나머지 스킨과 기타 기능은 기존과 동일한  방법으로 사용하시면 됩니다.

다른 위젯들도 수정방법은 동일합니다.
다만 sql을 직접 용도에 맞게 넣어줘야하는 숙제는 각자의 몫으로 남겨둡니다.

?
  • ?
    blogschool 2011.07.06 14:30

    다른 위젯도 쿼리 부분은 모두 동일하게 하는것인가요? ㅎㅎ

    로그인정보 모듈도 대부분의 사이트에서 사용할텐데..

    최적화 하는 방법을 알려주시면 감사하겟습니다.

     


List of Articles
번호 분류 제목 날짜 조회 수
33 서버 인터넷 Kibana : 새로운 헬게이트가 열리다 file 2018.12.27 263
32 기타등등 apache와 nobody file 2018.12.25 743
31 기타등등 LetsEncrypt file 2018.12.25 214
30 기타등등 아마추어의 서버운영 2018.12.22 174
29 기타등등 빌어먹을 X국놈들... file 2016.06.02 147
28 기타등등 스마트폰과 모바일인터넷 1 file 2011.05.16 9876
27 기타등등 다시 전자우편을 만지작거리면서... 7 2003.09.29 3042
26 Rhymix & XE 인기검색어 출력 위젯 수정법 2014.04.03 465
25 Rhymix & XE ISX(통합검색 확장모듈) 사용 설명서 file 2014.04.03 419
24 Rhymix & XE 비회원에게 다른 메뉴보이게하기 2012.03.15 21932
23 Rhymix & XE 이미지프로세스 모듈의 설정 및 사용방법(new version) file 2012.02.08 15843
22 Rhymix & XE 이미지 포맷 변환테스트 27 file 2012.02.01 19582
21 Rhymix & XE 모바일에서의 통합검색기능 6 file 2011.05.17 21280
20 기타등등 malware에 의한 해킹 사이트 대처 순서 2011.04.01 24039
19 Rhymix & XE reCaptcha를 이용한 새로운 캡차애드온 file 2011.04.01 21867
18 애드온 및 모듈 제작 초간단 애드온 제작법 2 file 2011.03.25 32495
» Rhymix & XE XE 속도 개선을 위한 위젯 수정법 1 2011.03.15 50095
16 Rhymix & XE 한국우편번호 확장모듈 file 2011.03.10 23703
15 기타등등 윈도우즈에서 ImageMgick을 이용한 imageprocess 사용 2 file 2011.03.10 24086
14 애드온 및 모듈 제작 모듈제작강좌 2 : Hellow World file 2011.01.15 6980
계속 검색
Board Pagination Prev 1 2 3 Next
/ 3
위로