Кэширование браузера в приложении ASP.NET

Любые предложения о том, как выполнять кеширование браузера в приложении asp.net. Я нашел несколько разных методов в Интернете, но не был уверен, что будет лучше. В частности, я хотел бы кэшировать мои файлы CSS и JS. Они меняются, однако, как правило, раз в месяц максимум.

Ответы

Ответ 1

Другой способ - хранить ваши статические изображения, css и js на другом сервере (например, CDN), который правильно настроил заголовок Expires, Преимущество этого в два раза:

Ответ 2

Стоит иметь в виду, что даже без заголовков Cache-Control или Expires большинство браузеров будут кэшировать контент, такой как JS и CSS. Что должно произойти, хотя браузер должен запрашивать ресурс каждый раз, когда он нужен, но обычно получает ответ "304 Unmodified", и браузер затем использует кешированный элемент. Это может быть довольно дорогостоящим с момента его поездки на сервер, но сам ресурс не отправляется, поэтому переданные байты ограничены.

IE, оставшийся без каких-либо конкретных инструкций по кешированию, по умолчанию будет использовать свою собственную эвристику, чтобы определить, нужно ли даже перезапрашивать элемент, который он кэшировал. Это несмотря на то, что явным образом не сказал, что он может кэшировать ресурс. Его hueristics основаны на Последней Модифицированной дате ресурса, чем старше, тем менее вероятно, что он изменится сейчас, это его типичная аргументация. Очень шерсть.

Честно говоря, если вы хотите сделать перформанс сайта, вам нужно иметь контроль над такими настройками кэша. Если у вас нет доступа к этим настройкам, не беспокойтесь о производительности. Просто сообщите спонсору, что он может не работать хорошо, потому что они не облегчили платформу, которая позволяет вам доставить это.

Ответ 3

Лучше всего сделать это, чтобы установить заголовок Expires в IIS в папках, которые вы хотите сохранить в кеш файле. Это позволит большинству современных браузеров и прокси кэшировать этот статический контент. В IIS 6:

  • Щелкните правой кнопкой мыши по папке (например, CSS или JS), которую вы хотите кэшировать браузером.
  • Нажмите свойства
  • Перейдите на вкладку заголовков HTTP.
  • Установите флажок "Включено истечение срока действия контента"
  • Установите длительный период для истечения срока действия, например, "Истекает через 90 дней"

Yahoo Developer Blog рассказывает об этой технике.

Ответ 4

Если вы не настроите IIS на управление asp.net для запросов js/css/image, они не будут видеть их по умолчанию, поэтому ваш лучший план (для долгосрочной поддержки) состоит в том, чтобы преднамеренно настроить заголовки ответов на вашем брандмауэре /trafficmanager/server или (лучше и что делает большая часть мира на данный момент) для версии ваших файлов в пути, то есть:

Вместо того, чтобы писать это в своей надписи:

http://www.foo.com/cachingmakesmesad.css

Используйте это:

http://www.foo.com/cachingmakesmesad.css?v1

.. и измените номер версии, когда вам необходимо эффективно очистить кеш. Если это каждый раз, то вы могли бы даже добавить GUID или datestamp вместо этого, но я не могу придумать никакого случая, когда я хотел бы сделать это на самом деле.


Я думал, что ваш вопрос был анти-кешем, но перечитывая его, я вижу, что я потратил впустую хороший ответ: P

Короче говоря, браузеры, как правило, очень агрессивно просканируют "простые" ресурсы, поэтому вам не стоит беспокоиться об этом, но если вы действительно хотите что-то сделать, вам придется иметь доступ к брандмауэру /trafficmanager/IIS по вышеуказанным причинам (по умолчанию ASP.NET не получит шанс).

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

Ответ 5

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

Вы также можете использовать ETags, но из того, что я понимаю, в некоторых случаях он не работает хорошо, если у вас есть сочетание IIS и веб-серверы apache, размещающие ваши изображения (или если вы планируете переключиться в будущем).

Вы можете просто убедиться, что дата файла более новая, и пусть сервер обрабатывает ее для вас, но вы должны убедиться, что сервер настроен правильно.

Ответ 6

Можно кэшировать статический контент, добавив следующий код в web.config

 <system.webServer>
    <staticContent>
      <clientCache httpExpires="Tue, 12 Apr 2016 00:00:00 GMT" cacheControlMode="UseExpires" />
    </staticContent>
</system.webServer>

Подробнее см. документацию clientCache.