我们有几个网站主要使用sql数据库后端进行内容管理。除非用户通过投票或更新(类似于SO)更改内容,否则这些网站大多数时间都在提供静态信息。这些网站都有母版页,其中用户特定信息通常显示在每个页面的顶部(也类似于SO)。
我们希望实现输出缓存,以防止数据库命中在每次请求时从数据库中获取内容,而90%的时间与先前请求(用户信息除外)相同。做这个的最好方式是什么?我显然知道通过控件进行部分缓存,但这意味着将每个页面内容作为控件,我们不想这样做。
有什么建议吗?我假设SO有一个缓存策略来实现这一目标。
答案 0 :(得分: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%静态的,那么如果你愿意投入大量精力来设置它,那么你可以获得一些巨大收益。