1

您好我正在尝试进行浏览器缓存实验。像这样

<head>
    <script type="text/javascript" src='<%=Tool.GetFileRefUrl("js_cached.js")%>' ></script>
    <script type="text/javascript">
        var lastFile = fun();
    </script>
    <script src="js_cached.js" type="text/javascript"></script>
    <script type="text/javascript">
        var cacheFile = fun();
    </script>
</head><body>
<form>
<div>

    The cache file is :<script type="text/javascript">
                           document.writeln(cacheFile);
                    </script>
    <br />
    The last file is :<script type="text/javascript">
                          document.writeln(lastFile);
                    </script>    
</div>
</form>
</body>

Tool.GetFileRefUrl("js_cached.js")每次都会返回一个随机的js文件字符串"js_cached.js?v=8752162122311"

第一次fun()运行它返回“A”,所以页面将显示:

缓存文件是 :A
最后一个文件是 :A

现在我更改了js_cached.jsWeb 服务器上的文件并fun()返回“B”,我希望也能看到结果:

缓存文件是 :A
最后一个文件是 :B

但实际上是:

缓存文件是 :B
最后一个文件是 :B

有什么问题吗?为什么浏览器不缓存js文件?我做了不正确的假设吗?

有趣的是

    function fun() {
    return "A";//after modify it be "B"
}

Tool.GetFileRefUrl 是

public class Tool
{
    public static string GetFileRefUrl(string url)
    {
        var ticks = GetLastWriteTime(url);
        var result = string.Format("{0}?v={1}", url, ticks);
        return result;
    }

    private static long GetLastWriteTime(string fileName)
    {
        var lastWriteTime = File.GetLastWriteTime(HttpContext.Current.Server.MapPath(fileName));
        return lastWriteTime.Ticks;
    }
}
4

1 回答 1

0

最后,我找到了一种缓存 js 文件的方法,将页面添加到浏览器选项卡(标记链接?嗯,我不确定它是什么英文,就像 IE 上的我的收藏夹)打开链接,你会看到

The cache file is :A
The last file is :A

修改js文件,并通过标记链接打开新标签

The cache file is :A
The last file is :B

Tks Bergi 为您提示 :)

于 2013-01-10T05:49:07.910 回答