Кэширование браузера в приложении ASP.NET - PullRequest
13 голосов
/ 05 июня 2009

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

Ответы [ 6 ]

6 голосов
/ 05 июня 2009

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

  1. Заголовок expires будет стимулировать браузеры и прокси кешировать эти статические файлы
  2. CDN будет выгружаться с вашего сервера, обслуживая статические файлы.
  3. Используя другое доменное имя для статического контента, браузеры будут загружаться быстрее. Это связано с тем, что обслуживание ресурсов из четырех или пяти различных имен хостов увеличивает распараллеливание загрузок .
  4. Если CDN настроен правильно и использует домен без файлов cookie , у вас не будет ненужных файлов cookie, идущих туда-сюда.
4 голосов
/ 05 июня 2009

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

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

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

3 голосов
/ 05 июня 2009

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

  1. Щелкните правой кнопкой мыши папку (например, CSS или JS), которую вы хотите кэшировать в браузере.
  2. Нажмите свойства
  3. Перейти на вкладку HTTP-заголовки
  4. Установите флажок «Истек срок действия содержимого» * ​​1010 *
  5. Установить длительный срок действия, например, «Срок действия истекает через 90 дней»

Блог разработчика Yahoo рассказывает об этой технике .

2 голосов
/ 04 февраля 2013

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

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

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

2 голосов
/ 05 июня 2009

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

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

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

2 голосов
/ 05 июня 2009

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

Вместо того, чтобы писать это в разметке:

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

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

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

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


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

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

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

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