2009-10-08 1 views
0

우리는 대부분 SQL 데이터베이스 백엔드를 사용하여 관리되는 여러 사이트가 있습니다. 이러한 사이트는 사용자가 투표 또는 업데이트 (SO와 유사)하여 콘텐츠를 변경하지 않는 한 대부분 정적 정보를 제공합니다. 이러한 사이트는 모두 사용자 별 정보가 각 페이지 상단에 표시되는 마스터 페이지를 가지고 있습니다 (SO와 유사).출력 사용자 별 정보가 포함 된 캐싱 페이지

우리는 db 히트가 사용자 정보가 아닌 이전 요청과 변경되지 않은 시간의 90 %가 될 때마다 db에서 콘텐츠를 가져 오지 못하도록 출력 캐싱을 구현하려고합니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 컨트롤을 통한 부분 캐싱을 확실히 알고 있지만 각 페이지 내용을 컨트롤으로 만드는 것을 의미합니다. 우리는 원하지 않습니다.

제안 사항? 나는 SO가 이것을 달성하기위한 캐싱 전략을 가지고 있다고 가정한다.

답변

1

하나 개의 아이디어는 내가 조금 전했다 캐시 전체 페이지하고, 사용자 spcific 정보 채우기 자바 스크립트 사용하는 것이 었습니다. 가장 큰 재 아키텍처가 필요 하겠지만 이익은 엄청날 수 있습니다.

은 내가 proof of concept about it을 쓴하지만 아이디어는 iframe에 동적으로 사용자 데이터를 렌더링 :

var iData = window.iframe.iData; 
if(!iData.loggedIn) 
{ 
    $('topnav_hidden').style.display = 'none'; 
    $('topnav_pm').style.display = 'none'; 
    $('topnav_mcp').style.display = 'none'; 
    $('topnav_logout').style.display = 'none'; 
    hideModFunctions(); 

    var replyLinks = getElementsByClass('reply_links', $('mainTable'), 'span'); 
    for(var i=0;i<replyLinks.length;i++) 
     replyLinks[i].style.display = 'none'; 

    var replyLinks = getElementsByClass('reply_links', $('basicTable'), 'span'); 
    for(var i=0;i<replyLinks.length;i++) 
     replyLinks[i].style.display = 'none'; 
} 
else 
{ 
    $('fillin_username').innerHTML = iData.username; 
    $('topnav_register').style.display = 'none'; 
    $('topnav_login').style.display = 'none'; 
    if(iData.userLevel != 'Mod' && iData.userLevel != 'Admin') 
     hideModFunctions(); 
} 

:

<html> 
<head> 
<script type="text/javascript"> 
var iData = {}; 
iData.loggedIn = true; 
iData.username = 'Your Username'; 
iData.userLevel = 'Mod'; 
</script> 
</head> 
</html> 

이 그런 다음 (캐시, 정적) 페이지에서, 페이지를 조작 이제 분명해질 것입니다 - 이것은 아마도 대부분의 사람들을위한 실질적인 접근법이 아닙니다, 그러나 이 실제로 번을 치고 콘텐츠가 99 % 정적 인 경우이 방법을 사용하면 당신이 그것을 설정하는데 많은 노력을 기꺼이 투자한다면 이득을 얻습니다.

+0

그러나 재미있는 아이디어는 사이트의 일부가 js 기능으로 사용할 수 없으므로 유용성에 영향을 미칠 수 있습니다 – Sheff