0

ほとんどが SQL データベース バックエンドを使用してコンテンツ管理されているサイトがいくつかあります。これらのサイトは、ユーザーが投票または更新 (SO と同様) によってコンテンツを変更しない限り、ほとんどの場合、静的な情報を提供します。これらのサイトにはすべて、ユーザー固有の情報が各ページの上部に表示されることが多いマスター ページがあります (これも SO に似ています)。

出力キャッシュを実装して、ユーザー情報以外の前のリクエストから変更されていない時間が 90% の場合に、リクエストごとにデータベースからコンテンツを取得するための db ヒットを防止したいと考えています。これを行う最善の方法は何ですか?コントロールを介した部分的なキャッシュについては明らかに認識していますが、それは各ページのコンテンツをコントロールにすることを意味し、これは望ましくありません。

助言がありますか?SOにはこれを達成するためのキャッシュ戦略があると思います。

4

1 に答える 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 に答える