Кэширование статического содержимого - PullRequest
4 голосов
/ 29 июня 2010

Мы используем IIS7 и dotnet 3.5 в нашей компании для создания различных веб-приложений, используемых как нашими внутренними, так и внешними клиентами.Мы рекомендуем начать использовать статическое кэширование содержимого для кэширования изображений и HTML-файлов.Насколько я понимаю, в файле web.config мы можем установить cachecontrolmaxage, чтобы указать количество дней, в течение которых файлы должны кэшироваться.Кроме того, было рекомендовано, чтобы мы вызывали эти статические страницы, передавая аргумент, скажем, myjsfile.js? Verfile = 1234, который можно изменять всякий раз, когда запускается новая версия файла.

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

Ответы [ 3 ]

1 голос
/ 08 июля 2010

Поскольку IIS7, все настройки IIS могут быть применены через файл web.config, в частности, раздел system.webServer .В этом случае вы должны проверить в разделе кэширования и создать пользовательский профиль (убедитесь, что для атрибута varByQueryString установлено значение true, чтобы "? Version = xxx" работал).

Переходя к вопросу развертывания, необходимо изменить URL-адрес, поскольку клиент не будет проверять наличие новой версии файла, пока кэш действителен (и вы говорите, что можете установить дни в качестве длительности кеша).Одним из распространенных шаблонов является автоматическое создание URL-адреса на основе даты изменения, например, если ваша исходная строка:

<script src='functions.js' />

Вы можете изменить ее на:

<script src='<%=GetFilenameWithModificationDate("functions.js")%>' />

Функция должна получить DateTime модификации файла и добавить его в файл, поэтому, если файл был последний раз изменен в 2010-01-01 в 10:12:34, она должна сгенерировать что-то вроде этого:

<script src='functions.js?version=20100101101234' />

Таким образом, когда вы изменяете файл, будет добавляться новая строка запроса и обновляться кеш.

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

HTH

0 голосов
/ 06 июля 2010

Имейте в виду, что IIS будет вызывать среду выполнения .NET только для файлов, сопоставленных с ISAPI asp.net.Таким образом, статический контент, такой как .html, .jpg и т. Д., Не будет затронут ни одним параметром web.config.Вы можете отобразить их, но таким образом вы потеряете производительность.Вероятно, не лучший маршрут.

Для кода скрипта я обычно использую систему, подобную airmanx, упомянутой выше.Глобальный параметр в файле .config, который добавляется к URL-адресу и обновляется при появлении новой версии.Вы можете автоматизировать это, взяв номер сборки приложения и передав его.

Для статического контента вы можете рассмотреть возможность обслуживания всего контента из другого домена (например, content.domain.com) и управлениязаголовки в IIS для кэширования, истечения срока действия контента и т. д. Это довольно простое решение, которое не требует слишком больших накладных расходов, хотя вам придется привлекать своих оперативников, если вам нужно истечь срок действия контента.Это не полностью автоматизированное решение, но я обнаружил, что оно работает довольно хорошо на большинстве крупных сайтов, над которыми я работал.

0 голосов
/ 04 июля 2010

Да, бит об использовании строки запроса с версией верен и работает.Однако я не уверен, что изменение настроек в web.config действительно будет применяться к статическому содержимому.Кеширование статического содержимого в IIS осуществляется администратором IIS по рекомендации разработчика в том месте, где я работаю.

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

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

Надеюсь, это поможет.

...