타운광장토픽게시판

슈퍼캐시를 사용하면 files/cache/store 폴더의 용량이 폭발적으로 늘어나면서 캐시파일 재생성 도중 오류가 발생하는 경우가 종종 있습니다. 라이믹스는 캐시파일 재생성 방식이 달라서 그나마 괜찮은 편인데, XE는 먹통이 되거나 뭘 재시작해 달라는 이상한 메시지를 띄우곤 하지요.

 

오늘 깃허브에 올린 1.1 버전에서는 이 문제를 해결하기 위해 자체적으로 캐시파일을 관리하는 기능을 탑재했습니다. 앞으로 슈퍼캐시 모듈이 생성하는 파일은 모두 XE 캐시와 별도로 files/supercache 폴더에 저장되고, 오래된 파일은 가능하면 그때그때 지워 주도록 하여 용량도 어느 정도 조절이 됩니다.

 

캐시파일 삭제는 XE처럼 PHP로 모든 파일을 일일이 삭제하는 방식이 아니라 라이믹스처럼 exec 함수로 rm -rf (리눅스) 또는 rmdir /S /Q (윈도우) 명령 실행을 시도하고, 호스팅 환경의 특성상 이게 허용되지 않는 경우에만 일일이 삭제합니다. (만약 여기서 심각한 버그가 발생한다면 서버를 통째 날려먹을지도? ㄷㄷㄷ)

 

오브젝트 캐시 설정을 "파일(file)"로 해놓고 쓰시던 분은 1.1 버전으로 업데이트하신 후 "기본값(default)"으로 바꿔 보세요. 이후에도 한 번은 files/cache/store 폴더를 수동으로 지워 주셔야 할 수 있지만, 그 다음에는 좀 괜찮아질 것입니다.

 

단, 새로 만든 기능이기 때문에 서버 환경에 따라 오류가 발생할 수도 있습니다. 오류 발생시 최대한 자세한 기록을 남겨 주시면 슈퍼캐시와 관련된 문제인지 확인해 보겠습니다.

 

깃허브 저장소: https://github.com/kijin/xe-supercache

설치 경로: ./modules/supercache

설치 환경: XE 1.8 이상, PHP 5.3 이상 (일부 기능은 XE 최신 버전 또는 별도 코어수정 필요)

 

 

지금까지 제보된 문제

 

- 전체화면 캐시 사용시 일부 사이트에서 모바일 사용자에게 PC용 화면이 표시되는 경우가 있다고 합니다.

- "잘못된 이미지 요청 차단" 기능 사용시 일부 IE 구버전 사용자에게 오류가 표시된다고 합니다. 얼마 전에 해당 기능을 수정했는데, 그 후에도 계속 문제가 발생하는지는 모르겠습니다.

- 모듈 설정이나 스킨 설정을 변경해도 전체화면 캐시에는 적용되지 않습니다. 따로 캐시파일 재생성을 해주셔야 합니다. 어느 정도까지는 보완할 수 있겠지만, 모듈 설정이 워낙 다양해서 완벽한 대응은 힘들 것 같네요.

 

TAG •

글쓴이 기진곰

profile
GitHub 아이디는 @kijin입니다. 사람을 위한 인터넷 생태계의 발전과 웹 보안에 많은 관심을 가지고 있습니다.
우리가 만들어 가는 XE의 새 이름, 라이믹스(Rhymix) 프로젝트에 참여하고 있습니다.
오픈소스 도로명주소 검색서버 및 API Postcodify를 개발, 운영하고 있습니다.
국내외 서버 및 클라우드서버 세팅, 이전, 튜닝해 드립니다.
  • profile
    학학~ 지금 패치하러 갑니다~~!!
  • profile

    패치후 첫 캐시파일 재생성은 시간이 꽤 걸리네요~

    Gzip 압축 사용하면 zipperupper 애드온은 사용안하는게 낫나요?

  • profile profile
    서로 무관한 기능이므로 함께 사용하셔도 됩니다.
  • profile
    더욱 좋아졌다니 반가운 소식이네요 ㅎㅎㅎ 감사히 잘 쓰겠습니다 ^^
  • profile
    감사합니다. 빨리 적용해 봐야겠네요^^
  • profile
    업데이트 감사합니다. 저희는 XE이지만 캐시파일재생성 오류라던지 캐시재시작 같은 메시지가 한번도 없었다는건 자랑~~ 입니다 ㅋ
  • profile profile
    웹지기님은 apc 쓰시지 않나요? 버전 궁합만 잘 맞으면 가장 빠른 ㅎㅎ
  • profile profile
    네. 저희는 apc를 써서 그런지 문제가 전혀 없고 빨라요 ㅋ
  • profile
    오브젝트 캐시 설정을 OPCACHE 로 설정해도 되나요?
  • profile profile
    opcache는 PHP 실행속도를 향상시키는 기술이지 오브젝트 캐시가 아닙니다.
  • ?

    버그 있습니다..
    사이트에 익스플로러 구버전 또는 xp 같은 특수한 환경의 경우 다른 페이지로 보여지는 기능을 사용중인 회원은 이 프로그램 사용하면 간헐적으로 일반 사용자도 특수페이지가 보여지는 버그가 있습니다.

    또한 호환성이 떨어지는 브라우저 사용자 또는 그러한 환경의 사용자가 메인페이지를 제대로 띄우지못한경우

    제대로 띄우지 못한 환경이 캐시로 저장되서 정상적으로 보여져야하는 사용자 조차 안보이는 이슈가 있습니다.

    그러므로 이슈가 될만한 환경의 사용자를 거르는 방법이 필요합니다. 

    예를들면 윈도우xp 익스9버전 이하 사용자를 캐시저장을 안시킨다던지 뭐 기타의 방법이 필요합니다.

    모든 사용자에게 캐시의 화면을 보여주기 때문에 생기는 이슈로 호환성이 완벽한 사이트 이외에 전 사이트가

    해당될것으로 보여집니다. 이상 보고 끝
    매우 위험한 이슈입니다.
    속도는 굉장히 빨라져서 좋습니다.

     

    ps. 

    별도로 캐시할 쿠키

     

     

    기능을 사용해서 예뢰를 두면 좋아보이나, 일반 사용자의경우 쿠키 구문 사용하기가 힘드니

    적당한 예제라도 보여주시면 감사하겠습니다.

     

    또 초기접속이 느려 사이트가 느린 사람들이 많이있습니다....

    이 프로그램을 사용하면 초기 접속이 약 800ms 에서 5ms 로 어마어마하게 줄어드는데요.

    초기 접속만 빠르게 할수잇는기능만 설정할수잇도록도 해주시면 정말 좋을거같습니다.

    사실 사용하는 이유가 그 이유라 ㅠ

    다른 캐싱 다운로드보다 초기 접속 붙는 속도가 중요해서요

  • ? profile

    글쎄요, 이건 버그라고 봐야 할지 전체화면 캐시 기능의 선천적인 한계라고 봐야 할지 모르겠네요.

    전체화면 캐시라는 것은 한 사용자에게 보여준 화면을 다른 사용자에게도 그대로 보여주는 것이 기본적인 작동 원리입니다. 따라서 사용자마다 달라져야 하는 화면에서는 전체화면 캐시를 사용할 수 없습니다.

    사용자마다 화면이 달라질 수밖에 없는 로그인 상태에 따른 구분, PC/모바일 구분 정도는 기본적으로 지원해야 하지만, 그 밖에 세부적인 구분을 추가할수록 캐시 효율은 점점 떨어지고 캐시 데이터 분량만 점점 늘어납니다. IE9 이하 사용자를 구분한다면 좀 있으면 IE8, IE7, 그 밖의 브라우저들도 버전별로 다 구분해서 별도로 캐싱해 달라는 요청이 있겠지요. 다 그렇게 하고 나면 뭐가 남나요? 캐시를 불러오기 전에 처리해야 할 작업이 늘어날수록 캐시 효율은 떨어집니다.

    브라우저 종류를 막론하고 화면을 제대로 띄우지 못하는 문제가 있다면 그건 오류를 일으키는 모듈의 버그이지, 슈퍼캐시의 버그는 아니라고 봅니다. 특정 모듈이 꼭 특정 버전의 IE에서만 오작동한다는 법도 없고, 오작동하는 모듈이 화면을 제대로 띄웠는지 안 띄웠는지 슈퍼캐시 입장에서는 사실 알 방법이 없습니다.

    초기 접속만 빠르면 좋겠다는 말씀은 무슨 뜻인지 이해가 되지 않습니다. 전체화면 캐시를 사용하면 캐시가 적용된 모든 화면이 빨라집니다. 방문자가 처음 접속한 화면이든 두 번째로 접속한 화면이든 슈퍼캐시는 알지도 못하고 알 필요도 없습니다. 캐시가 적용된 화면이면 빠르고, 그렇지 않은 화면이면 느릴 뿐이지요. 만약 특정 화면에만 전체화면 캐시를 적용하고 싶으시다면 해당 모듈을 제외한 모든 모듈을 예외로 지정하시면 됩니다.

    기존의 방식대로 100% 그대로 사이트를 운영하시면서 성능만 대폭 향상시킬 수 있는 마법은 없습니다. 전체화면 캐시에 적합하지 않은 기능을 포기하거나, 해당 모듈에서 전체화면 캐시를 포기하거나, 둘 중 하나를 선택하시기 바랍니다. 대부분의 사이트에서는 전혀 사용하지 않는 특이한 기능을 만들어 쓰다가 오류가 발생한다면 그 기능을 만들어 쓰는 분이 책임을 져야지요.

  • profile ?

    모든 익스플로러에 호환되는 사이트를 만들기가 참 어렵습니다.
    최소한 특정사용자에게는 캐시를 저장시키지 않도록 할수없을까요..
    흠... 저는 익스 10 11 크롬 사용자들만 캐시를 저장시키고 보여주고
    나머지 사용자들은 그냥 캐시기능동작을 안시키고 싶거든요.
    가능할지요.. 저 말고도 원하시는분이 있으리라고 사료되옵니다..

     

    솔직히 쿠키기능만 사용가능해도 다 가능할것 같은데...

    쿠키를 어떤 상황에 넣고 그쿠키값을 어떻게 넣어야하는지 기본 예제만 알려주셔도

    많은 초보 분들이 도움받을것 같습니다.

    그리고 메인화면이 중요한경우에는 메인화면만 캐싱예외로 하더라도

    뭐 다른페이지 게시판페이지들은 빨라지니 일단 예외처리를 최대한 활용해서 운영해보도록하겠습니다.

     

    기진곰님 이 모듈은 솔직히 성능..정말 최강입니다...

    메인화면이 모든사용자에게 호환이되지 않는다는건 사이트의 약점인데 참 모든 브라우저와

    모든환경에 적용시키는 운영자분들은 정말 대단하십니다 ㅠ

  • ? profile
    캐싱되는 것은 HTML 소스뿐이므로, CSS나 JS를 로딩할 때 특정 IE 버전을 위한 conditional comment를 사용하거나 (XE에서 제공하는 targetie 속성 활용) JS에서 브라우저에 따라 별도 처리를 거치도록 하면 전체화면 캐시를 아무 문제 없이 사용할 수 있습니다.

    모바일 사용자의 비중이 꽤 높은 사이트라면 IE 사용자가 많은 PC에서는 캐시를 끄고, 모바일에서만 사용하도록 설정하셔도 됩니다.
  • profile ?
    아하.. 그렇군요. 감사합니다.
    아직 초보라 ㅠ.ㅠ 커스터마이징이 많이힘드네요.
    메인페이지말고는 문제가없어서 예외조치로 이용중입니다!!
    성능은 이 모듈 정말 넘사벽
  • ?

    제가 감히 기진곰님께 건의를 하나드리면 사용자가 구지 들어오는 화면을 캐시하지말고 서버자체적으로 캐시한 화면만 보여줄 수 없을까요 그 방식을 원하는 사람도 있을거 같아서 말씀드립니다.

    한마디로 사용자 캐시가아닌 정해놓은 시간마다 자동으로 서버에서 캐시를할수있도록 하여 그 캐시된 화면만 보여주는겁니다. 구지 특정사용자가 들어갈때 화면을 저장하지말구요.

    메인페이지가 자주 바뀌지 않는 사이트를 운영하는 경우에는 그 방식을 채택하면 호환성 문제를 걱정할 필요가 없을거 같아요. 어차피 서버자체적으로캐시되는내용 그대로 보여주니깐요.
    가능할찌 여쭤봅니다 기진곰님 진심으로 부탁합니다.
    나중에 서버 옮기게될때 꼭 서버이전서비스 이용해보고 싶네요...

     

    그러니깐.. 지금은 사용자가 들어갈떄 그 사용자의 화면을 캐싱하잖아요...

    그게아니구 서버자체적으로 그 화면을 로딩해서 저장하는거에여 ㅎ

    그리구 그 저장한 화면을 가지구 일정 시간마다 자동캐싱하구요.

    그럼 특수한 사용자들의 잘못된 캐싱파일을 저장하지 않구 정상적인 저장화면만 저장되니

    누이좋고 매부가 좋을것 같다는 생각이 듭니다.

     

  • ? profile
    정해진 시간에 어떻게 서버에서 자동으로 작업을 실행하지요?

    단독서버나 가상서버라면 cron을 사용해서 어떻게든 해볼 수 있겠지만, XE 사용자의 대부분을 차지하는 웹호스팅에서는 꿈도 못 꿀 일이지요. 게다가 XE의 특성상 cron으로 실행하면 환경변수가 제대로 들어오지 않아 오히려 이상한 페이지가 캐시될 가능성이 높아 보입니다. 어떤 화면이 정상적인 화면인지 판단하기 어렵다는 문제도 그대로고요...

    투데이서버님의 사정도 이해하지만, 만들기 싫어서가 아니라 XE를 사용하는 다양한 환경에서 안정적으로 구현하기가 쉽지 않을 것 같아서 드리는 말씀입니다. 기능을 만들려다가 괜히 버그만 만드는 건 아닐지...ㅜㅜ
  • profile ?
    현재 옵션에보면 300초 기본설정되있는 캐시생성기간이 그럼 그 시간이 지나면 사용자가 방문했을때 그 페이지가 캐시되는건가요?

    캐시라는 의미를 아직 잘모르겠는데 임의의 BOT같은 존재가 방문했다치고 그 화면을 저장시키면안될까요?
    그러니깐 제말은 이상한 사용자가 이상한 브라우저를들고 방문해서 이상한 화면을 캐싱시켜놓으면
    그 이상한 화면을 정상적인 사용자가 보게되니깐 그게 문제가 될것 같다고 말씀드리는겁니다.

    예를들어 익스 6사용자라던지 뭐 그러한 사용자들이 충분히 문제가 있을수 있지 않을까 하는
    그러한 걱정을 저는 해보는것입니다.

    만약 그게 안된다면 특정 모듈은 윈도우 7~10이상 크롬 브라우저 또는 익스 11이상 사용자들만
    캐싱시킬 수 있고 나머지 사용자들은 그냥 캐싱을 받아올 수 만 있게는 안될런지요.

    중요한건 캐시를 받아오는게 아니라 저장시키는거니깐요.

    기진곰님 제가 두서없이 말씀드려서 이해가 안되셧을수도 있지만 답변 부탁드릴게요.
  • ? profile

    네, 300초가 경과된 후 처음으로 방문한 사용자에게 보여준 내용을 저장해 두었다가 300초간 사용하고, 이것을 계속 반복합니다. 매초마다 새 방문자가 들어오는 대규모 사이트가 아니라면 정확히 300초 간격이 된다는 보장은 없습니다.

    중요한 것은 실제 화면에 표시되는 모습(스크린샷)이 저장되는 게 아니라 HTML 소스코드만 저장된다는 점입니다. 똑같은 소스를 엉뚱하게 보여주는 IE6 같은 브라우저도 있지만, 그렇다고 다른 브라우저를 사용하는 방문자에게까지 그 깨진 모습이 보여지지는 않습니다. 소스코드는 똑같으니까요. 만약 이게 걱정이셨다면 걱정하지 않으셔도 됩니다.

  • profile ?

    신기하게도 그 소스코드가 어떤 특정 환경의 사용자에게는 다르게 보여지거나 로딩되는 경우가 있는거 같던데(예상..)
    기술적으로 실제 저장되는 소스코드는 어떠한 환경의 유저가 접속하더라도 동일한건가요?

     

    예를들어 메인화면에 위젯이 있다고 치면 어떤 환경의 사용자에게 위젯이 정상적으로 로딩이 안된다고 치면

    로딩이 안된 html은 다르기 때문에 그게 저장되면 다른 사용자에게도 영향이 가진 않을런지요.

    예외 위젯설정같은건 없겟죠. 

  • ? profile

    위젯이 정상적으로 로딩이 안된다는 것이 어떤 의미인가요? 서버에서는 위젯 html을 남들과 똑같이 만들어서 보내줬는데 브라우저가 그걸 제대로 표시하지 못하는 경우인가요? 아니면 위젯 html 자체가 제대로 생성되지 않는 문제인가요? 만약 전자라면 슈퍼캐시와는 무관할 테고, 후자라면 위젯의 버그겠지요?

  • ?

    마지막으로 질문드립니다.
    일단 index 들어가기전에 ie 하위 사용자들을 보내버릴려고하는데요.
    현재는 레이아웃에서 불러오는 소스코드에 지정하고 있습니다.
    따로 xe폴더 없이 다이렉트로 운영하고 있구요.
    캐싱되기 전에

    <!-- Browser Type  -->
    {@$browser_type = strtolower(getenv("HTTP_USER_AGENT"))}
    <block cond="preg_match('/msie 6.0/',$browser_type)">{@$browser="IE6"}</block>
    <block cond="preg_match('/msie 7.0/',$browser_type)">{@$browser="IE7"}</block>
    <block cond="preg_match('/msie 8.0/',$browser_type)">{@$browser="IE8"}</block>
    <block cond="preg_match('/msie 9.0/',$browser_type)">{@$browser="IE9"}</block>
    <block cond="preg_match('/firefox/',$browser_type)">{@$browser="Firefox"}</block>
    <block cond="preg_match('/safari/',$browser_type) && substr_count($browser_type,'version/5')">{@$browser="Safari5"}</block>
    <block cond="preg_match('/safari/',$browser_type) && !substr_count($browser_type,'version/5')">{@$browser="Safari"}</block>
    <block cond="preg_match('/chrome/',$browser_type)">{@$browser="Chrome"}</block>
    <block cond="preg_match('/opera/',$browser_type)">{@$browser="Opera"}</block>

    <[email protected]($browser=="IE6" || $browser=="IE7" || $browser=="IE8" || $browser=="IE9")-->
    <[email protected]($mid=='index')-->
    <script>location.href="보내버릴주소"</script>
    <[email protected]>
    <[email protected]>

    이 코드를 삽입할만한 곳이 있을까요?

    즉 홈페이지 접속할때 캐싱화면을 들어가기전에 위코드가 먼저 반응하도록 될지 여쭤봅니다.

     

    메인화면 캐싱 캐시를 불러오기전에 로드할 코드라는 칸을 만들어서 어떻게 안될까요 ㅠ

     

  • ? profile
    config 폴더 안에 config.user.inc.php 파일을 만들어서 XE 템플릿 문법 말고 그냥 PHP로 작성해 넣으세요. XE 실행 초기단계에 자동으로 인클루드됩니다.

    <script>location.href="보내버릴주소"</script>

    이 부분은

    header('Location: 보내버릴주소');
    exit();

    로 바꿔버리시면 됩니다.
  • profile ?
    정말 감사합니다. 기진곰님..
    Swiper.js << 이거 뭔지아시나요 IE9버전 이하에서는 제대로 동작을 안하더라구요... 이것때문에 문제가 좀있엇나봐요 ㅠ ㅠ

    기진곰님.. config.user.inc.php 여기서 스크립트부분만 저걸로바꾸면되나요? 위에코드들은 그대로
    사용해도되는지요...?

    <!-- Browser Type -->
    {@$browser_type = strtolower(getenv("HTTP_USER_AGENT"))}
    <block cond="preg_match('/msie 6.0/',$browser_type)">{@$browser="IE6"}</block>
    <block cond="preg_match('/msie 7.0/',$browser_type)">{@$browser="IE7"}</block>
    <block cond="preg_match('/msie 8.0/',$browser_type)">{@$browser="IE8"}</block>
    <block cond="preg_match('/msie 9.0/',$browser_type)">{@$browser="IE9"}</block>
    <block cond="preg_match('/firefox/',$browser_type)">{@$browser="Firefox"}</block>
    <block cond="preg_match('/safari/',$browser_type) && substr_count($browser_type,'version/5')">{@$browser="Safari5"}</block>
    <block cond="preg_match('/safari/',$browser_type) && !substr_count($browser_type,'version/5')">{@$browser="Safari"}</block>
    <block cond="preg_match('/chrome/',$browser_type)">{@$browser="Chrome"}</block>
    <block cond="preg_match('/opera/',$browser_type)">{@$browser="Opera"}</block>

    <[email protected]($browser=="IE6" || $browser=="IE7" || $browser=="IE8" || $browser=="IE9")-->
    <[email protected]($mid=='index')-->
    header('Location: 보내버릴주소');
    exit();
    <[email protected]>
    <[email protected]>

    요렇게 하면될런가요?ㅠ
    제가 초보라서 하나 딱 말하면 바로 못알아먹어서 죄송합니다.
    시간되시면 변환해서 알려주시면 제가 꼭 은혜를 잊지 않겠습니다.
  • ? profile

    <?php  // 이미 있는 경우 제외

    if (preg_match('/MSIE [6789]\./', $_SERVER['HTTP_USER_AGENT']) && $_REQUEST['mid'] == 'index')
    {
        header('Location: 보내버릴주소');
        exit();
    }

  • profile ?

    정말 감사합니다.

    기진곰님... 정말로.. 이런거 참 고급기술이고 아무도 알려주지 않는데요..

    다돈받고 팔려고하죠..참 대단하시네요...

    보통 이런건 30만원정도에 알려주시던데 ㅠㅠ 무료로 배포해주셔서 진짜 감사해요.

     

    제가 좀 더 찾아보니깐.
    MSIE [2-9]

    이렇게 하면 익스플로러 9이하버전은 싹다 포함한다고 하더라구요.
    정말 감사합니다.
    익스 9이하 쓰는사용자들은 다 경고메세지를 보내야겟어요 ㅎㅎ
    익스 10이상부터써야지 아직도 9ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ

  • ?
    이분 정말 칭찬받아야될 분입니다.
    다른분들은 귀찮아서 안해주거나
    돈주쇼 하는데 이분은 그런거 없이 정말 친절하네요 하..
    .감동받았네요.
  • ?
    3.3.1/js/swiper.min.js
    이거 js 사용하시는분들은 익스 9미만 다 에러뜨니까 조심하세요 ㄷㄷ
  • ?
    확률적 추정치 사용시 방문자가 많지 않은 사이트는 좀 떨어질 수 있습니다.
    라는 부분에서 혹시 설정치를 좀 만들어주셔서 조회수가 좀 많이나오도록 할 수 있을까요?
    예를들어서 1단계부터 10단계를 조절한다던지
    아니면 증가치를 숫자로 1~5000사이로 입력해서 그에 비례하던지
    어떠한 방법이 있을거 같은데 어떻게 생각하시는지요
    혹시 커스터마이징 할 수 있다면 해당부분을 알려주시면 감사하겠습니다.
  • ? profile
    조회수 조작 기능은 없습니다 ㅋ
  • profile ?
    음 조작이라기보다 추정치니깐 추정치를 조금올려야 ㅠㅠ 좋지않을까싶어서 암튼 감사합니다!! 기진곰 사장님!
  • ? profile

    방문자가 많지 않은 사이트에서 추정치가 실제보다 적게 나올 수도 있다고 써놓은 이유는
    쿼리를 줄이기 위해 매번 조회수를 올리지 않고 10번 조회할 때마다 10씩 올리는데
    방문자가 별로 없으면 10번을 채우지 못하기 때문입니다.
    10번을 채우면 정상적으로 나오므로, 추가로 더 올려줄 필요는 없습니다.

    (여기서 10번은 예시입니다. 실제 방문자수에 따라 간격이 자동으로 조절됩니다.)

  • profile ?
    아하 그렇군요!! 꿀꿀 입니다....
    자체수정으로... 10번을 채우면 20번으로.......하고싶다능...
    ㅋㅋ 그런데 궁금한게요.
    저희는 중복애드온을 깔아서 조회수를 IP당 1번이 아니라
    조회한만큼 올리는데요... 기진곰님은 XE 기본대로 당연히 IP당 1번올리겠죠?
    IP상관없이 조회수를 카운팅시킬 수 있도록은 설정 가능한지 여쭙니다.
  • ? profile
    네, XE 방식대로 집계합니다. 집계 방식을 변경하는 옵션은 없습니다.
  • profile ?
    감사합니다^^
    조회수 중복해서 IP상관없이 그냥 조회한대로 올라가는기능은 뭐 못쓰겟네요 ㅠ
    아쉽네요 ㅠ
    그래도 슈퍼캐시를 쓰기위해서라면!! 감수합니다.
  • ?

    기진곰님께서는 DB_CACHE 방식과 REDIS_CACHE 방식에 대해서는 어떻게 생각하시나요?

    DB캐시는  mysql의 cache 기능을 쓰기 때문에 아주 강력한성능이 나오게 됩니다.  라고 하며

    그 상위버전이 REDIS_CACHE 같은데 REDIS도 따로 서버에 PHP 확장이 되어있어야 하는거 같구요...

     

    아래는 REDIS_CACHE 예제입니다.

    function redis_cache($c_name, $seconds=300, $c_code) {
    global $g4;

    $redis = new Redis();
    $redis->connect($g4["rhost"], $g4["rport"]);
    $redis->select(0);
    if ($redis->ttl($c_name) > 0)
    return $redis->get($c_name);
    else {
    // $c_code () 안에 내용만 살림
    $pattern = "/[()]/";
    $tmp_c_code = preg_split($pattern, $c_code);

    // 수행할 함수의 이름
    $func_name = $tmp_c_code[0];
    // 수행할 함수의 인자
    $tmp_array = explode(",", $tmp_c_code[1]);

    if ($func_name == "include_once" || $func_name == "include") {
    ob_start();
    include($tmp_array[0]);
    $c_text = ob_get_contents();
    ob_end_clean();
    } else {

    // 수행할 함수의 인자를 담아둘 변수
    $func_args = array();
    for($i=0;$i < count($tmp_array); $i++) {
    // 기본 trim은 여백 등을 없앤다. $charlist = " \t\n\r\0\x0B"
    $tmp_args = trim($tmp_array[$i]);
    // 추가 trim으로 인자를 넘길 때 쓰는 '를 없앤다
    $tmp_args = trim($tmp_args, "'");
    // 추가 trim으로 인자를 넘길 때 쓰는 "를 없앤다
    $func_args[$i] = trim($tmp_args, '"');
    }
    // 새로운 캐쉬값을 만들고
    $c_text = call_user_func_array($func_name, $func_args);
    }
    // 값이 없으면 그냥 return
    if (trim($c_text) == "")
    return;
    // redis의 cache 값을 업데이트
    $redis->setex($c_name, $seconds, $c_text);
    // 새로운 캐쉬값을 return (slashes가 없는거를 return 해야합니다)
    return $c_text;
    }
    }

     

    B개발자는

    최근글, whatson 등에 캐쉬를 쓰는 것과 쓰지 않는 것은 차이가 엄청 납니다.

    DB나 디스크에 대한 access rate와 관련이 있거든요.

     

    속도는 아래와 같습니다.

    no chache < file cache << DB Cache <<< Redis Cache

     

    Redis는 초당 처리건수가 대부분 서버에서 18만건 정도이고

    메모리에서만 처리하기 때문에 disk는 전혀 부하를 주지도 않아서

    가장 뛰어난 성능 입니다.

    DB Cache와 Redis Cache의 차이는 월등하구요.

     

    절대적으로 Redis Cache를 추천 합니다.

     

     

    이런글을 남긴바 있습니다.

     

    슈퍼캐시 모듈이 최강이 되기 위하여 여러가지로 저도 자료를 퍼오고 있으니 토론형식으로 제 의견도 한번 생각해주세요 ㅎㅎ

     

    REDIS 관련 의견 MEMCACHE 와 비슷한듯

     

    메모리 캐쉬을 자주 이용하는 편인데, 몇년전 Redis 을 설치만 해놓고 

    우연히 어제 오늘 잠깐 사용해보고 메뉴얼을 따라해 봤는데

    결론은 "장난 아니다" 라는 생각이 들었습니다.

      

    왜? 구인쪽에 Redis 라고 말하는지와 국내외에서 수많은 이슈가 있는지, 

    NH* 에서 사용했다라는 글과 함께 놀라운 내용들이 많았습니다.

    나온지는 몇년 안되었는데, 3.0 부터 클러스터링까지 지원하니,  ㅎㄷㄷ

     

    - 기능 : 캐쉬서버

    - 라이센스 : BSD

    - 지원 OS : 원도우, 맥, 리눅스계열

    - 설치 : 간단 명료 

    - 용도 : 메모리에 올려 놓고 DB 처럼(?) 사용 할 수 있는 기능으로 여러 수많은 함수을 지원

    - 특이사항 : 분산화까지 지원하면서, DB 별로 키와 값을 별도로 관리 할 수 있음

                       PHP 용도에서 사용 할 수 있는 C 로 만들어진 so(dll) 이 있음

                       세션까지 Redis 로 할 수 있네요....ㅎㄷㄷ 

     

    - Redis 배포사이트 : http://redis.io/

    - 설치 : http://redis.io/download <--- 설치법도 무진장 간단

    - Redis 사용 함수들 : http://redis.io/commands <-- 너무 많아서 공부가 필요 할 것 같습니다. 

    - PHP 사용을 위한것 : https://github.com/phpredis/phpredis

    - 원도우용 GUI 툴 : http://redisdesktop.com/  <---  사용을 해보니, 편했습니다.

    - 특이사항 : 수많은 언어에서 사용 가능 

         ActionScript  Bash  C  C#  C++  Clojure Common Lisp  Crystal  D  Dart  Elixir  emacs lisp Erlang  Fancy  

         gawk  GNU Prolog  Go  Haskell Haxe  Io  Java  Javascript  Julia  Lua Matlab  Nim  Node.js  Objective-C 

         OCaml  Pascal Perl  PHP  Pure Data  Python  R  Racket Rebol  Ruby  Rust  Scala  Scheme  Smalltalk Swift  

         Tcl  VB  VCL 

     

    - NHN : http://d2.naver.com/helloworld/294797 

                 NHN 에 다른 내용을 읽다 보니, 최근에는 zoopiter 로 바꾼것 같고, 

                 zoopiter  을 공개 하는것 같습니다만 못 찾겠네요.

     

     

     

    저는 php 5.4 버젼으로 개인 PC 에 먼저 설치한 상황이며 

    설치을 다 하셨다면 phpinfo.php 에 아래와 같이 나옵니다. 

     

    325814bbb60195eddcc835903a5fad08_1445970
     

     

    [ PHP 테스트 샘플코드 ]

     

          $redis = new Redis(); 

          $redis->set('bengi','1111');

          echo $redis->get('bengi');

          > 결과 : 1111 

     

    [ 모든 데이터 한방에 지우기 ]

          $redis->flushAll(); 

     

    [ GUI 툴 에서 확인 ]

         325814bbb60195eddcc835903a5fad08_1445971 

     

    [ 결론 ]

    서버가 몇대 있다면, 사용자 모드에 표현되는 부분을 전부 Redis 로 변경하고, 

    ( 1~2 대만 사용한다면 쇼핑몰의 경우 방문자 정보, 상품 정보만 사용해도 좋을듯 )

    실제 DB 저장되는 부분이 발생하는 것은 DB 에 저장함과 동시에 

    Redis 에 Update 시켜준다면 탁월한 효과을 볼 수 있를것 같습니다.

     

    윗글 출처 : http://sir.kr/so_server/635

  • ? profile
    DB 캐시는 워낙 여러가지 의미가 있기 때문에 어떤 것을 말하는지 모르겠네요. 무엇을 의미하는지에 따라 파일캐시보다 못할 수도 있고 더 나을 수도 있습니다.

    라이믹스에서는 Redis 캐시도 지원합니다. Redis는 서버를 재부팅해도 캐시 데이터가 그대로 남아 있다는 장점이 있지만, 캐시 목적으로는 불필요한 기능이 많아서 메모리 사용량도 늘어나고 관리가 복잡해지기 때문에 일반적으로는 Memcached를 권장합니다.
  • ?

    그리고 초기화면 캐시 버그는 원인을 찾았습니다.
    3.3.1/js/swiper.min.js 사용시 익스9이하의 경우 오류를 발생시키는데요
    저걸 사용하는 위젯 하위부분에 있는것들은 제대로 html이 생성이 안됩니다.
    도중에 락이걸린것처럼 데드락? 멈춰버리는거죠...ㅎㅎ
    방법은 3.3.1/js/swiper.min.js
    이걸못쓰는 브라우저 사용자를 말씀해주신대로 아예 초기에 안드로메다로
    보내버리는방법 또는 3.3.1/js/swiper.min.js
    를 사용안하는 방법 두가지 밖에 없음을 확인하여 첫번째 방식으로 처리하였습니다.

  • ? profile
    그냥 저 파일을 로딩하는 부분을 찾아서 targetie="gt IE9" 속성을 넣어 버리면 IE9 이하에서는 로딩되지 않도록 XE가 알아서 처리해 줄 수 있을 텐데요... 슈퍼캐시와도 100% 호환되는 방법이고요.
  • profile ?
    감사합니다 구글링해보겟습니다.
    괜찮은방법이네요..
  • ? profile
    swiper 3.0+에서 문제되는 것이 css3 flexbox입니다.
    polyfill적용하시던가 아니면 2.7.6으로 가세요.
    ie8, ie9는 현재 점유율이 10%도 안될텐데.포기 하시는 것이 나을 것 같네요.
    ie8,9를 지원하시려면 js, html5, css3 중 많은 것을 포기해야하는데
    하나를 얻고 99개를 포기하시는 것입니다.
  • profile ?
    맞아요 6 7 8 9는 과감하게 버리는게 맞습니다.
  • ?

    혹시 카운터도 제대로 동작안해가지구 인원수가 잘못나올까요?
    캐쉬라서 어쩔수읍을라나 ㅠㅠ
    방문인원과 페이지뷰가 많이 줄어들엇네요 ㅠ

  • ? profile
    카운터 애드온은 XE 성능에 쥐약입니다.
    꺼 버리고 구글 애널리틱스 쓰세요. 캐시 사용과 무관하게 아주 정확합니다.
  • profile ?

    애널리틱스도 카운터처럼 외부에 보여질수잇나요? 그냥 저만볼수잇는통계아닌가요?
    봐봐야겟네요 ㅎㅎ

     

    흠 애널리틱스는 외부에보여지는건 없나보네요 ㅎㅎ

    없애야겟네요 카운터가 쥐약이라는말씀감사합니다.

    없애버림 ㅋ

  • ?
    여기 좋은 개발자분들이 많이 오셔서 물어보는데요 혹시 구글 Analytics API 이용해서 XE랑 연동되어서 카운터 보여주는 위젯이나 XE연동 프로그램 유료라도 배포하시는분 없으실까요? API 있어서 연동시키면 카운터가 훌륭하게 나올거 같은데 ㅠㅠ 어렵네요
  • ?

    글을 작성했을때 해당 게시판/사이트메인 등 갱신되도록 체크되있다고 하더라도
    캐시 갱신이 안되서
    글을 작성해도 리스트에 보여지지 않는 버그가 있사옵니다.

  • ? profile
    - Cache-Control 헤더를 사용하면 갱신되지 않은 것으로 보일 수도 있습니다.
    - 타임라인 모듈 사용시 실제 글이 소속되지 않은 게시판은 갱신되지 않을 수도 있습니다.
    - 서버 환경에 따라 캐시 파일이 제대로 갱신되지 않을 수도 있습니다.
  • ?
    실시간 글 알림애드온 을 사용하는경우 알림이 올라오는 페이지가 캐시에 저장되면
    그 알림메세지가 계속 그페이지에서 캐시되어있는동안 보이는 버그가 있사옵니다.

    https://xe1.xpressengine.com/?mid=download&package_srl=22672196

    해당애드온입니다.
  • ? profile

    비회원에게는 알림이 뜨지 않도록 설정하거나, 만약 그런 설정이 없다면 제작자분께 만들어 달라고 하세요.

    해당 애드온은 서버 과부하를 일으키는 가장 큰 원인 중 하나이므로 사용을 권장하지 않습니다.

  • profile ?

    감사합니다^^

    메일로 문의하나 드렸으니 확인되시면 회신부탁드립니다.

  • ?

    정말 다좋은데 캐싱되기 이전에 실행할 수 있는 애드온이 있었으면 좋겠습니다.
    아이피차단애드온도 슈퍼캐쉬랑 충돌이 일어나서 무용지물이 됩니다..

     

    속도가 가장중요하겠지만 어쩃든 기존 애드온도 최상단에서 실행되어 캐싱이전에 뭔가의

    일을 할 수 있는 변수를 주시면 감사하겠습니다.


    애드온 자체가 슈퍼캐시의 실행이전에 뭔가 차단하거나 이동되거나 긴급한 상황변화를 주어야하는 경우에는 어떠한 변수를 줄 수 있도록 되었으면 정말 좋겠습니다.

  • ? profile
    애드온 중에 성능을 무참하게 깎아먹는 것들이 워낙 많아서, 애드온 최초 실행 시점보다 먼저 슈퍼캐시가 작동하도록 만들어 두었습니다 ㅎㅎ 덕분에 저번에 알려드린 config.user.inc.php 외에는 끼어들 여지가 없지요.

    성능을 약간 포기하더라도 애드온 사용을 원하시는 분들을 위한 옵션 추가도 고려해 보겠습니다.
  • profile ?
    일단 말씀해주신대로 user.inc로 차단기능도 구현했구요
    ㅎㅎ
    감사합니다. 이 프로그램은 정말 지저스같은 프로그램입니다.
  • ?
    혹시 그누보드4용 슈퍼캐시도 제작하시나여?
    그누보드4용도 있으면 참좋을텐데요 ㅎㅎ.... 비슷한 기능찾기가 참힘드네요.
  • ?
    글을 비회원이 작성을해도 자기가 작성한글이 안보이고 전에 캐싱페이지가 계속 보이는 버그가 있사옵니다.
  • ? profile
    새 글을 쓰면 해당 모듈의 전체화면 캐시를 자동으로 갱신하는 기능을 사용해 보세요.
    Cache-Control 헤더 기능을 켜놓은 경우에도 비슷한 증상이 발생할 수 있습니다.
  • profile ?
    일단 cache-control을 해제해보았습니다^^
  • ?

    실제 모바일 사용자로 캐싱을 구분하도록 하였습니다.
    혹시라도 모바일페이지를 따로 구분하지 않은 상태에서도 캐싱동작을 하기 위한 경우에
    참고해주세요.

     

    supercache.controller.php

    $is_mobile = Mobile::isFromMobilePhone() ? true : false;
    를 아래로 수정하면 실제 모바일을 체크하여 캐싱여부를 결정합니다.
    $is_mobile = Mobile::isMobileCheckByAgent() ? true : false;

  • ? profile
    그렇게 바꾸면 모바일에서 PC모드 보기, PC에서 ?m=1으로 모바일 모드 테스트 등의 기능이 작동하지 않을 가능성이 있습니다.

    isMobileCheckByAgent는 무조건 디바이스가 모바일 기기인지만 체크하고,
    isFromMobilePhone은 사용자의 선택과 태블릿 여부 등을 종합적으로 판단합니다.
  • profile ?
    감사합니다^^ 자바스크립트가 정말 유용하네요 none 과 display ..
    자바 php html5 다 알아야 웹짤듯요
  • ?
    Cache-Control 헤더 사용 << 이거 체크하는게 이득일까요 아닐까요.
    체크했을때 글써도 캐시갱신이 안되는 문제가 있어서 해제했엇는데요.
    체크했을때가 속도가 훨씬빠르다는느낌을 받아서요 ㅎㅎ
  • ? profile
    Cache-Control 헤더를 적용하면 같은 페이지를 다시 방문했을 때 아예 서버에 요청을 하지 않습니다. 아까 띄웠던 화면을 브라우저에서 캐싱해 두었다가 그대로 띄우죠. 당연히 엄청나게 빠르지만... 5분간은 뭔 짓을 해도 갱신이 안됩니다 ㅎㅎ
  • ?
    보면 cache-control 적용시 2ms 미적용시 200ms 차이가 엄청심함..
    근데 cache-control 사용시 갱신이 제대로 안되는경우발생..ㅠ.ㅠ
  • ?
    Cache-Control 헤더를 메인화면에만 사용할 수 있으면 정말 좋을듯하네용.
    게시판에는 누가 글을 썼는데 자기 글이 목록에없으면
    어 머지? 글이안써졋나? 라는 오해를 불러일으킬수잇어서...
  • ? profile
    검토해 보았으나, 로그인 후에도 메인화면에서는 로그인하지 않은 것으로 보이는 문제가 있어서 보류합니다.
  • ?
    슈퍼캐시 사용시에 추천수도 실제랑 달라지는 문제가 있습니까?
    희안하게 추천해주신 회원님하고 추천수랑 상이한 현상이 있네여?
    무슨문제일까하다가 슈퍼캐시가 생각나서 글남겨봅니다 ㅠ.
  • ?
    슈퍼캐시에서 게시물 조회수를 갱신하면서 혹시 추천수에 영향을 끼칠 수 있는지 검토를 좀 부탁합니다.
  • ? profile
    추천수는 건드리지 않습니다.