как кэшировать CSS, изображения и js?

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

Также было бы возможно иметь их проверку браузеров на новые или измененные версии этих файлов?

Спасибо!

26
задан Drew Noakes 28 October 2012 в 18:33
поделиться

5 ответов

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

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

6
ответ дан 28 November 2019 в 06:55
поделиться

Вам нужно установить заголовки управления кешем на сервере. Вы можете сделать это, придерживаясь этого в вашем 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>

QueryString - это число Major.minor.0.Changeset, и меняется в любое время, мы нажимаем сборку, заставляя клиента повторно восстановить его. То же самое то же самое происходит на стилях в их элемент.

45
ответ дан 28 November 2019 в 06:55
поделиться

@paul Cracky и @salsa правильно правильно, что браузеры будут обрабатывать кэширование по умолчанию, пока ссылка одинакова.

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

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

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

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

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

4
ответ дан 28 November 2019 в 06:55
поделиться

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

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

-121--4648521-

Кэширование на стороне клиента автоматически обрабатывается браузерами, когда вы правильно установлены заголовки Cache-Control и установите Web.config. Таким образом:

<system.webServer>
    <staticContent>
        <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="00.00:10:00" />
    </staticContent>
</system.webServer>
-2
ответ дан 28 November 2019 в 06:55
поделиться

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

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

0
ответ дан 28 November 2019 в 06:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: