我有一个使用大量 JavaScript 的 .NET Web 应用程序。 .aspx 和 .js 文件密切相关。 问题:.aspx 文件在客户端上始终是最新的(未缓存),但 .js 文件很可能已缓存。如果文件仅缓存一个 session ,这甚至会成为一个问题,因为用户在我的网站上花费了很多时间,并且每次我更新 .aspx/.js 对时,用户都会遇到问题。
现在,我找到了一个解决方案,但我不确定是否有更好的解决方案或者我的解决方案是否存在性能缺陷。
这是我的解决方案:
.js-.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>
每次上传新版本时,链接都会更改,并且我可以确保用户在更改时立即获得新的脚本或图像。
最佳答案
Safari 拒绝缓存带有查询参数的 URL。因此,您可以使用版本化路径之类的东西来代替查询参数,并使用 mod_rewrite 来删除它。
类似于:
<script type='text/javascript' src='/scripts/1377815076/GamesCharts.js'></script>
在 Apache 配置文件中(其他服务器的配置留作家庭作业):
RewriteEngine On
RewriteRule ^/scripts/[0-9]+/(.+)$ /scripts/$1
关于javascript - 如何: Javascript files always up-to-date,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3766790/