Выходные страницы кэширования с пользовательской информацией - PullRequest
0 голосов
/ 08 октября 2009

У нас есть несколько сайтов, которые в основном управляются с использованием базы данных SQL. эти сайты большую часть времени предоставляют статическую информацию, если пользователи не изменяют контент путем голосования или обновления (аналогично SO). Все эти сайты имеют главные страницы, где информация о пользователях часто отображается вверху каждой страницы (также как и в случае с SO).

Мы хотим реализовать кэширование вывода, чтобы предотвратить попадание в базу данных, чтобы получать содержимое из базы данных каждый запрос, когда в 90% случаев оно не изменяется по сравнению с предыдущими запросами, кроме информации пользователя. Каков наилучший способ сделать это? Я, очевидно, знаю о частичном кэшировании с помощью элементов управления, но это означало бы, что каждая страница содержала элемент управления, чего мы не хотим делать.

Есть предложения? Я предполагаю, что SO имеет стратегию кэширования для достижения этой цели.

1 Ответ

1 голос
/ 08 октября 2009

Одна идея, которая у меня возникла несколько лет назад, состояла в том, чтобы кэшировать всю страницу , а затем заполнить пользовательскую информацию с помощью 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% статичен, это может привести Вы получите большие выгоды, если будете готовы приложить немало усилий для его настройки.

...