【问题标题】:Output Caching pages with user specific information输出带有用户特定信息的缓存页面
【发布时间】:2010-12-05 00:50:27
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# .net caching outputcache


    【解决方案1】:

    我之前的一个想法是缓存整个页面,然后使用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% 是静态的,那么这如果您愿意投入大量精力来设置它,可以为您带来一些巨大的收益。

    【讨论】:

    • 一个有趣的想法,但可能会影响可用性,因为如果没有 js 功能,网站的某些部分将无法使用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多