При работе с веб-страницами клиент / браузер решает, обновлять ли он файл, такой как изображение, или .css или .js, или он берет его из кэша.
В случае страницы .aspx решает сервер.
Конечно, на уровне IIS или также используя некоторые методы HttpModule, я могу изменить заголовки запросов, чтобы сообщить клиенту, если и как долго файл должен кэшироваться.
Теперь у меня есть веб-сайт, на котором .aspx идет рука об руку с соответствующим .js. Так что, возможно, у меня есть некоторый код jQuery в .js, который обращается к элементу в .aspx. Если я удалю этот элемент из .aspx, я также адаптирую .js. Если пользователь перейдет на мою страницу, он получит новый .aspx, но он все равно может получить старый .js, что приведет к забавным эффектам.
Мой сайт использует много скриптов и много изображений. По причинам производительности я настроил в IIS, что эти файлы "никогда" не истекает.
Теперь время от времени файл ДОЛЖЕН изменяться, и я хочу убедиться, что пользователи получают файлы обновлений.
В начале я помог себе, переименовав файлы. Итак, у меня были SkriptV1.js и SkriptV2.js и так далее. Это самый плохой вариант, поскольку история репозитория не работает, и мне нужно адаптировать и ссылки, и имя файла.
Теперь я улучшился и изменил только ссылки, используя Skript.js? V = 1 или Skript.js? V = 2.
Это заставляет клиента обновлять файлы. Это отлично работает, но все же я должен адаптировать ссылки.
Теперь здесь есть еще одно улучшение:
<script type='text/javascript' src='../scripts/<%# GetScriptLastModified("MyScript.js") %>'></script>
Итак, «GetScriptLastModified» добавит параметр? V = следующим образом:
protected string GetScriptLastModified(string FileName)
{
string File4Info = System.Threading.Thread.GetDomain().BaseDirectory + @"scripts\" + FileName;
System.IO.FileInfo fileInfo = new System.IO.FileInfo(File4Info);
return FileName + "?v=" + fileInfo.LastWriteTime.GetHashCode().ToString();
}
Итак, отрендеренный .js-Link будет выглядеть для клиента так:
<script type='text/javascript' src='/scripts/GamesCharts.js?v=1377815076'></script>
Ссылка будет меняться каждый раз, когда я загружаю новую версию, и я могу быть уверен, что пользователь сразу же получит новый скрипт или изображение, когда я его изменю.
Теперь два вопроса:
а) Есть ли более элегантный способ добиться этого?
б) Если нет: кто-нибудь догадывается, насколько велика будет нагрузка на сервер? На одной странице может быть до 50 версионных элементов, поэтому для одного .aspx GetScriptLastModified будет вызываться 50 раз.
С нетерпением жду обсуждения:)