Как кэшировать сайт asp.net для лучшей производительности - PullRequest
2 голосов
/ 12 апреля 2010

Я веб-дизайнер и обычно разрабатываю корпоративные веб-сайты, которые часто не требуют обновления. Поэтому я хочу кэшировать вывод на один день. Как я могу это сделать?

Также принимаются любые предложения по повышению производительности asp.net на медленных серверах.

Ответы [ 4 ]

7 голосов
/ 14 апреля 2010

Имейте в виду, что кэширование ASP.NET содержит ошибку начиная с 1.0, которая может эффективно отключить кэширование на стороне клиента.
Вот почему метод HttpCachePolicy.SetOmitVaryStar() был добавлен позже в качестве обходного пути. Разработчики должны использовать его, но, к сожалению, похоже, что немногие из них знают о вышеупомянутом методе.
В ответ поведение изменяется в ASP.NET 4.0, как подробно описано в Список критических изменений ASP.NET 4 :

В ASP.NET 1.0 ошибка приводила к тому, что кэшированные страницы указывали Location = "ServerAndClient" в качестве параметра кэша вывода, чтобы выдавать заголовок Vary: * HTTP в ответе. Это привело к тому, что клиентские браузеры никогда не кэшировали страницу локально.

В ASP.NET 1.1 был добавлен метод System.Web.HttpCachePolicy.SetOmitVaryStar, который можно вызывать для подавления заголовка Vary: *. Этот метод был выбран потому, что изменение испускаемого заголовка HTTP в то время считалось потенциально разрушительным. Однако разработчики были озадачены поведением в ASP.NET, и отчеты об ошибках показывают, что разработчики не знают о существующем поведении SetOmitVaryStar.

В ASP.NET 4 было принято решение исправить проблему с корнем. Заголовок Vary: * HTTP больше не отправляется из ответов, в которых указана следующая директива:

В результате SetOmitVaryStar больше не требуется для подавления заголовка Vary: *.

В приложениях, которые указывают Location = "ServerAndClient" в директиве @ OutputCache на странице, теперь вы увидите поведение, подразумеваемое именем значения атрибута Location, то есть страницы будут кэшироваться в браузере без необходимости Вы вызываете метод SetOmitVaryStar.

Если страницы в вашем приложении должны испускать Vary: *, вызовите метод AppendHeader, как в следующем примере:

* 1 028 * HttpResponse.AppendHeader ( "Vary", "*"); * +1029 *

Кроме того, вы можете изменить значение атрибута Расположение кэширования вывода на «Сервер».

6 голосов
/ 12 апреля 2010

Я бы порекомендовал вам следовать этим правилам, чтобы улучшить производительность в целом

http://developer.yahoo.com/performance/rules.html

Если вы установите YSlow для firebug, он подтвердит все эти правила для вас.

А что касается кеширования, в частности, я рекомендую вам прочитать этот урок. Кэш - это очень обширная тема, и все нелегко объяснить в 10 строках: -)

http://www.mnot.net/cache_docs/#CONTROL

Говоря конкретно о директиве кэша вывода для страниц ASP NET, она довольно проста в использовании. Здесь у вас есть ссылка

http://msdn.microsoft.com/en-us/library/hdxfb6cy.aspx

Но учтите, что важно использовать кеш для страниц, а также для других ресурсов, таких как CSS, JS и изображения.

4 голосов
/ 12 апреля 2010

Вы используете директиву outputcache

http://www.codeproject.com/KB/web-cache/cachingaspnet.aspx

10 советов по написанию высокопроизводительных веб-приложений

http://msdn.microsoft.com/en-us/magazine/cc163854.aspx

1 голос
/ 13 апреля 2010

Есть статья, которую я написал несколько лет назад о кэшировании asp.net. Я верю, что вы понимаете язык:

http://www.csharpnedir.com/articles/read/?id=736&title=ASP.NET%27de

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...