У меня есть веб-приложения .NET, которые используют много JavaScript. Файлы .aspx и .js идут рука об руку.
Проблема. Файлы .aspx всегда обновляются на клиенте (не кэшируются), но файлы .js вполне могут кэшироваться. Это даже проблема, если файлы кэшируются только для одного сеанса, так как пользователи проводят много часов на моем сайте, и каждый раз, когда я обновляю пару .aspx / .js, у пользователей возникают проблемы.
Теперь я нашел решение, но я не уверен, что, возможно, есть лучшее решение или у моего решения есть недостаток производительности.
Это мое решение:
.js-References в .aspx:
<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>
Ссылка будет меняться каждый раз, когда я загружаю новую версию, и я могу быть уверен, что пользователь сразу же получит новый скрипт или изображение, когда я его изменю.