0

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

我们希望实现输出缓存,以防止 db 命中以从 db 中获取每个请求的内容,而 90% 的时间它与之前的请求(除了用户信息之外)没有任何变化。做这个的最好方式是什么?我显然知道通过控件进行部分缓存,但这意味着使每个页面内容成为控件,我们不想这样做。

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

4

1 回答 1

1

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

我写了一个关于它的概念证明,但想法是在 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% 是静态的,如果你愿意投入大量精力,这可能会给你带来一些巨大的收益设置它。

于 2009-10-08T15:09:42.977 回答