2009-10-08 54 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

相關問題