0

我面临的问题是 javascript 被缓存在用户的浏览器上,并且在更改投入生产时没有得到更新。因为该站点使用多个嵌入式 iframe,仅使用 f5 是不够的。我采用的解决方案是首先加载一个脚本,该脚本获取我需要的 js 文件的所有修改日期,然后将这些日期附加到每个页面的 js 文件中。每个页面看起来像这样:

    <script type="text/javascript" src="get_dates"></script>//returns the dates for each file in array
    <script type="text/javascript">
        document.writeln('<script type="text/javascript" src="' + some_path + '?Mod=' + date_array[pos] + '"></script>...repeat for all scripts
    </script>

我的问题是:

  1. 在模组日期更改之前,您如何判断脚本是否被缓存?(我仍然希望它们被缓存,只是如果它们被更新了)
  2. html 页面的缓存将如何影响这一点?
  3. 使用 document.writeln(() 会影响缓存吗?即,如果您编写完全相同的脚本,它们是否仍会被缓存?
4

3 回答 3

0
于 2013-03-22T14:40:42.140 回答
0

在每个生产版本中将版本控制应用于您的 js 文件。让我们说

发布1:

<script src="source.js?v1.0"></script>

发布2:

<script src="source.js?v2.0"></script>

等等...

这样,您仍然允许客户端缓存您的 js 文件,但在特定版本上。

于 2013-03-22T14:42:25.193 回答
0

在模组日期更改之前,您如何判断脚本是否被缓存?

只需将到期时间设置为无限(或者说,1 年 - 这已经足够长了)。每次您的Mod参数更改时,都会请求新文件。

html 页面的缓存将如何影响这一点?

一点也不。get_dates但是,脚本的缓存会。

使用 document.writeln(() 会影响缓存吗?即,如果您编写完全相同的脚本,它们是否仍会被缓存?

不,它不会影响任何事情。结果 -<script>引用外部脚本的节点将是相同的。

另请阅读如何强制浏览器重新加载缓存的 CSS/JS 文件?

于 2013-03-22T14:42:35.773 回答