2009-10-08 28 views
0

我们有几个网站主要是使用sql数据库后端进行内容管理的。这些网站大部分时间都提供静态信息,除非用户通过投票或更新来更改内容(类似于SO)。这些网站都有主页面,用户特定的信息通常显示在每个页面的顶部(也类似于SO)。输出具有用户特定信息的缓存页面

我们希望实现输出缓存,以防止数据库命中从db中获取每个请求的内容时,如果90%的时间与以前的请求不变,而不是用户信息。做这个的最好方式是什么?我明显知道通过控件进行部分缓存,但这意味着要让每个页面都成为控件,这是我们不想做的。

有什么建议吗?我认为SO有一个缓存策略来实现这一点。

回答

1

我有一个想法有点以前是缓存整个页面然后,填写用户信息spcific使用JavaScript。它很可能需要非常大的重新架构,但收益可能是巨大的。

我写了一个proof of concept about it但这个想法是在一个iframe动态渲染出用户的数据:

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

然后在你的(缓存,静态)页面,操作页面:

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(); 
} 

现在要清楚了 - 对于大多数人来说这可能不是一个实用的方法,但如果你的真的受到冲击而且你的内容是99%静态的,如果您愿意投入大量精力来设置它,那么您将获得更多的收益。

+0

一个有趣的想法,但可能有可用性含义作为该网站的一部分将无法使用js能力 – Sheff 2009-10-08 15:20:43

相关问题