2009-10-08 4 views
0

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

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

Любые предложения? Я предполагаю, что у SO есть стратегия кэширования для достижения этого.

ответ

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(); 
} 

Теперь, чтобы быть ясным - это, вероятно, не практический подход для большинства людей, но если вы действительно получаете забитый, и ваш контент на 100% статичен, это может привести к некоторому би g, если вы были готовы вложить много усилий в настройку.

+0

Интересная идея, однако, может иметь последствия юзабилити, поскольку части сайта будут непригодными без возможности js – Sheff