javascript - 如何: Javascript files always up-to-date

标签 javascript performance http caching http-caching

我有一个使用大量 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/

相关文章:

javascript - jpm 的默认 Firefox 路径不起作用

C++检查文件是否存在而不打开它?

android - 构建一个基本的网络服务器

javascript - 使用javascript?

javascript - React Spinner 在没有状态的情况下加载动画/ View ?

objective-c - Objective - C,在 UIImageView 中显示图像序列的最快方法

正在进行中的 HTTP 状态代码?

.net - 在搜索表单中发布或获取?

javascript - Express Session 不适用于 Ajax 调用

C++ Pimpl 与纯虚拟接口(interface)性能对比