포럼
XE 풀 페이지 캐쉬 프로그램(xe-hook-fpc) 공개합니다.
2014.05.27 00:18
Xpressengine full page cache handler
간단하게 구현한 xpressengine 의 풀 페이지 캐쉬 프로그램입니다. 모듈이나 애드온 형태가 아닙니다. 몇달전에 xpressengine 설치해서 돌려보니 상당히 무겁다는것을 체감한후 속도 개선을 위해 간단하게 제작한 프로그램입니다. 테스트는 1.7.4에서 진행 했었고 공개하기전 1.7.5에서도 간단하게 해보았습니다. 작동을 위해서는 우선적으로 Memcached 설정이 활성화 되어져 있어야 합니다. 개발된 코드(xe-hook-fpc)와 일치하는 작동을 위해서는 cpage, page 등의 변수등에 대한 skin 설정도 정확하게 이루어져야 합니다. 조회수 업데이트 및 리스트 업데이트등의 동적인 페이지 구현에 있어서 몇가지 문제점들을 가지고 있는 프로그램입니다. 사용시에 유의하세요!
프로젝트 홈: https://github.com/vozlt/xe-hook-fpc
요구사항
- Xpressengine(1.7.4+)
- Memcached
Xpressengine memcached 설정
shell> vi [Installed xpressengine path]/files/config/db.config.php
'use_object_cache' => 'memcache://localhost:11211'
설치
shell> git clone git://github.com/vozlt/xe-hook-fpc.git
shell> cd xe-hook-fpc
shell> bash install.sh install [Installed xpressengine path]
삭제
shell> cd xe-hook-fpc
shell> bash install.sh uninstall [Installed xpressengine path]
적용 전후 함수들의 호출 수
Actions | Disable | Enable |
---|---|---|
document | 7177 | 518 |
list | 4862 | 455 |
xhprof 를 사용해서 분석한 내용이며 페이지 로딩 속도 및 시스템의 부하 또한 비례 할 것입니다.(10배이상)
테스트 환경:
centos6(x86_64), nginx, php-fpm-5.5, php-opcache-5.5, mysql-5.6, sphinx-2.1.4
기본 캐쉬 만료 시간
Actions | expires(sec) |
---|---|
index | 300 |
list | 3600 |
document | 3600 |
comment | 3600 |
searched result | 3600 |
menu | 3600 |
캐쉬 만료시간은 [xpressengine 설치경로]/config/config.user.inc.php 에서 설정 가능하며 0으로 설정하면 해당 action은 캐쉬하지 않습니다.
캐쉬 만료 시간 설정 위치
shell> vi [Installed xpressengine path]/config/config.user.inc.php
캐쉬키 출력 하기
shell> vi layouts/[your layout path]/layout.html
<!--fpc:debug_info:s--><!--fpc:debug_info:e-->
레이아웃등에 위처럼 설정후 xe-hook-fpc 를 활성화 하고 정상적으로 캐쉬가 생성되면 아래처럼 html 에 출력 됩니다.
<!--debug_info{fpc:pc:ProcCacheDocument:board:1:0:login}-->
기타
xe-hook-fpc 구현시에 게시글(댓글포함)의 (추가|삭제|수정) 등의 변화시에 저장된 캐쉬를 삭제하는 처리는 해놓았지만 위에서 언급했듯이 cpage, page 등등의 변수가 해당 동작(추가|삭제|수정)시에 정확하게 전달되어야 합니다. 동적인 처리를 위해 내부로직에서 조회수등의 치환등의 몇개 정보는 구현해 놓았으나 너무 많은 경우의 수로 인하여 언급하지 않겠습니다. 그리고 솔직히 만든지 몇달 되기도 했고 xpressengine 내부적인 흐름도 모두 본것도 아니라서 제 환경에서는 대충 잘 동작하게는 했지만 다른분들은 어떨실지 모르겠습니다. 풀캐쉬로 인해 동적인 페이지 구현에 있어서 여러가지 단점은 존재하지만 잘 설정하시면 효과는 아마도 깜짝 놀라실 거에요:)
댓글 13
-
혼마_메이코
2014.05.27 00:20
-
vozlt
2014.05.27 00:32
저도 윈도우에서 사용은 한번도 안해봤으나 아래처럼 하시면 될 듯 하네요~1. 다운로드 받고: https://github.com/vozlt/xe-hook-fpc/archive/master.zip2. 이동: xe-hook-fpc3. 복사: config/config.user.inc.php 를 [xpressengine 설치 경로]/config/ 로4. 복사: classes/cache/FullPageCacheHandler.class.php 를 [xpressengine 설치 경로]/classes/cache/ 로5. 복사: index.fpc.php 를 [xpressengine 설치 경로]/ 로6. 이동: [xpressengine 설치 경로]7. 옮김: index.php 를 index.org.php 로8. 옮김: index.fpc.php 를 index.php 로수동 설치는 아래에 적어 두었습니다. -
혼마_메이코
2014.05.27 00:37
친절한 설명 감사합니다. :D
-
銀童
2014.05.27 09:16
varnish 랑 비슷한 방법의 접근법이네요
성능은 매우 괜찮을것으로 생각합니다.
:) 코드 공개에 박수를 보냅니다
-
매력적인분석
2014.05.27 09:47
기능 설명만 봐도 ㅎㄷㄷ 하군요 정말 엄청난 물건인듯 하네요
-
socialskyo
2014.05.27 10:41
엄청나네요. 박수 박수 박수 !!
-
StyleRoot
2014.05.27 23:06
우와.. 정말 너무 좋습니다!
정말 마음에 들어서 Windows 분들도 간편히 설치하시라고 설치 스크립트 제작해보았습니다.
다만 메인 페이지에만 적용하고 싶은데, 특정 페이지만 캐시할 수 있으면 좋을것 같습니다!
-
키스투엑스이
2014.05.28 00:07
이런걸 뚝딱뚝딱 만드시다니..! -
StyleRoot
2014.05.28 00:09
사실 .NET 언어로 제작할까 하다가,
소스도 오픈되고 가벼운 배치 파일로 만들었습니다. ㅎㅎ
-
vozlt
2014.05.28 00:28
캐쉬 만료시간은 [xpressengine 설치경로]/config/config.user.inc.php 에서 설정 가능하며 0으로 설정하면 해당 action은 캐쉬하지 않습니다.
define('__XE_HOOK_FPC_INDEX_EXPIRES__', 300);define('__XE_HOOK_FPC_LIST_EXPIRES__', 3600);define('__XE_HOOK_FPC_DOCUMENT_EXPIRES__', 3600);define('__XE_HOOK_FPC_COMMENT_EXPIRES__', 3600);define('__XE_HOOK_FPC_SEARCH_EXPIRES__', 3600);define('__XE_HOOK_FPC_MENU_EXPIRES__', 3600); -
큰돌♡
2014.05.27 23:24
웹 호스팅을 사용하는 저로서는 그림의 떡이네요.
-
Luatic™
2014.07.04 13:18
웹호스팅라 할지라도 memcache 를 지원하는 서버라면 가능하네요.
-
XE러버
2014.07.04 12:48
대단하네요
리눅스용인가요... windows에서 ㄴ안되는건가요...ㅜㅜ