Вопрос

Я хотел бы, чтобы изображения, css и javascript кэшировались на стороне клиента в их браузере при загрузке веб-страницы.Существует так много разных типов кэширования, что я не знаю, с какими из них использовать asp.net mvc.

Возможно ли также, чтобы их браузеры проверяли наличие новых или измененных версий этих файлов?

Спасибо!

Это было полезно?

Решение

На самом деле браузеры заботятся об этом за вас автоматически.Вам нужно приложить все усилия, чтобы заставить их НЕ кэшировать css, js, html и изображения.

Я не очень хорошо знаком с ASP MVC, но я думаю, что тип кэширования, о котором вы думаете, - это кэширование кода операции для созданного вами динамического вывода на стороне сервера?

Другие советы

Вам необходимо установить заголовки управления кэшем на сервере.Вы можете сделать это, вставив это в свой web.config:

<system.webServer>
  <staticContent>
     <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="30.00:00:00" />
  </staticContent>
</system.webServer>

Это позволило бы браузеру теперь даже проверять наличие нового контента на чем-либо статичном в течение 30 дней.

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

<script src="/Resources/Javascript/Combined.js?v=2.2.0.1901" type="text/javascript"></script>

Строка запроса является основной.Minor.0.Номер набора изменений и изменяется всякий раз, когда мы запускаем сборку, заставляя клиента повторно извлекать ее.То же самое происходит и с таблицами стилей в их <link> элемент.

@Paul Creasey и @Salsa оба правы в том, что браузеры будут обрабатывать кэширование по умолчанию, пока ссылка одна и та же.

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

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

Вы можете добавить параметр к URL-адресу, который будет использоваться только для целей кэширования, таких как:

<script src="/myJavascript.js?version=4"></script>

Затем просто измените номер версии, когда вы меняете содержимое и вам нужно принудительно обновить ala на стороне клиента этот ответ.

Взгляните на ответ, который я разместил здесь для решения, которое максимизирует преимущества использования кэширования и позволяет избежать любых проблем, связанных с необходимостью "жесткого" обновления пользователей (Ctrl+F5).

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

Лучше всего это сделать в IIS или в вашем конфигурационном файле - убедитесь, что для ваших CSS / JS / images установлено значение "никогда не истекать".

Когда вы ссылаетесь на них из своего кода, я предлагаю добавить версию или дату сборки к имени файла, напримерscript.js?20100120, так что, когда вы решитесь их изменить, вам просто нужно изменить версию, чтобы принудительно обновить ее из всех браузеров, которые ее кэшировали.

Кэширование на стороне клиента обрабатывается браузерами автоматически, когда вы правильно настроенный Заголовки управления кэшем и установите web.config.Вот так :

<system.webServer>
    <staticContent>
        <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="00.00:10:00" />
    </staticContent>
</system.webServer>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top