2013-02-08 3 views
0

У меня есть несколько страниц сайта WebMatrix Razor ASP.Net, где я добавил одну строку кода:Что скрывает кеширование от работы в WebMatrix?

Response.OutputCache(600); 

От чтения об этом я предположил, что это означает, что IIS будет создавать кэш html, созданный на странице, служит для этого html в течение следующих 10 минут, и через 10 минут после следующего запроса он снова запустит код.

Теперь страница выбирается как часть запрограммированного jquery-вызова. Временной код клиента запускается каждую минуту. Код есть очень простой:

 function wknTimer4() { 
     $.get('PerfPanel', function(data) { 
     $('#perfPanel').html(data); 

     }); 

Это время от времени появляется в кэш, но когда я смотрю на количество запросов к базе данных, сделанных в течение 10-минутного периода, я мог бы иметь более 100 запросов к базе данных. Я знаю, что кэширование работает не так, как я ожидаю. Работает ли кеш только в течение одного сеанса? Есть ли другие ограничения?

Обновление: на самом деле не имеет значения, что делает клиент, независимо от того, извлекает ли он страницу через вызов jQuery или прямой html. Если сервер кэшируется, не имеет значения, что делает клиент.

Обновление 2: полный код сбрасывается здесь. Сверлильные станки:

@{ 

    var db = Database.Open("LOS"); 
    var selectQueryString = "SELECT * FROM LXD_funding ORDER BY LXDOrder"; 
    // cache the results of this page for 600 seconds 
    Response.OutputCache(600); 


} 



@foreach (var row in db.Query(selectQueryString)){ 

    <h1> 
    <a href="Dashboard/FundingDetails/@row.Status">@row.quotes</a> Loans @row.NALStatus, oldest  @(NALWorkTime.WorkDays(row.StatusChange,DateTime.Now)) days 

    </h1> 

} 

ответ

1

Ваши предположения относительно правильности работы OutputCache. Можете ли вы проверить инструменты firebug или chrome для просмотра исходящих запросов на вашу страницу? Если вы используете jQuery, иногда люди устанавливают свойство кеша на $ .get или $ .ajax на false, что приводит к тому, что запрос на страницу вызывает зависающую цепочку вершин. Я сделал ошибку, установив это вверх по всему миру, чтобы исправить некоторые проблемы с JQuery и IE:

http://api.jquery.com/jQuery.ajaxSetup/

Другой посмотреть здесь группировка БД вызовов. Вы просто делаете много звонков с одного запроса? Вы выполняете команду db в цикле, внутри другого читателя? Код в этом случае был бы полезен.

Удачи, надеюсь, это поможет!

+0

Response.OutputCache имеет необязательный параметр variableByParams, который заставит его кэшировать разные html для разных параметров. В моем случае, даже если jquery выполняет фанк-трейлинг-цепочку, сервер должен кэшировать и возвращать тот же результат. В одной странице cshtml есть один вызов базы данных, поэтому нет циклов или решений, которые заставили бы запрос выполняться несколько раз. Возможно, он не смотрит на запрос, а кэширует разные html на основе файла cookie simplemembership. – Knox

+0

В ретроспективе я бы не хотел, чтобы он кэшировал html для всех точно так же, я хочу, чтобы он делал это только для разрешенных ролей. Тем не менее, решение о ролях находится в файле cshtml, который я хочу кэшировать ... таким образом, я считаю, что вам не следует использовать функцию OutputCache, если вы заботитесь о безопасности. Вместо этого я планирую кэшировать данные, поэтому я не делаю дорогой вызов базы данных, а затем запускаю код cshtml без вызова Response.OutputCache. – Knox

+0

Я получил награду Джастину Беквиту, потому что его ответ был лучшим, но я все еще думаю, что есть где-то там объяснение :) – Knox

Смежные вопросы