【问题标题】:Control Browser Caching of Generated JavaScript控制生成的 JavaScript 的浏览器缓存
【发布时间】:2013-02-20 20:17:42
【问题描述】:

背景

MVC 4 应用程序需要包含从数据库生成的 JavaScript。生成的文件比较大,只是偶尔变化(2-10天变化一次)。

接受的答案

Generate javascript file on the fly in asp.net mvc

为生成 JavaScript 提供了一个很好的框架。但是,JavaScript 资源的 URL 是静态的。据我了解,浏览器将缓存该资源。该缓存可以由OutputCacheAttribute 控制。

问题

如何使浏览器缓存在生成的 JavaScript 更改时过期,类似于捆绑的工作方式?不能为OutputCacheAttribute 使用SqlDependency

【问题讨论】:

  • 脚本 URL 中的版本查询字符串?例如。 foo.js?v=1234567。 (当您的 JS 文件更改时,附加一个不同的查询字符串。这会强制浏览器请求它。)
  • 或者,将 javascript 文件命名为与其生成日期有关的名称。
  • @ColinDeClue:JavaScript 资源的名称是控制器的 URL,不是吗?不知道如何给 JavaScript 资源一个不同的名字。
  • @ŠimeVidas:该文件没有明确定义的“版本”。必须构造 JavaScript 时查询数据库。
  • @EricJ。嗯,上次查询数据库时的时间戳可以作为版本标识...

标签: javascript asp.net-mvc browser-cache


【解决方案1】:

我有类似的情况,每次重新生成 JavaScript 文件时,我所做的就是在脚本标记中的查询字符串末尾附加一个随机 Guid。

例如:

<script type="text/javascript" src="/scripts/generated.js?id=7c97aa32-29d9-dd11-a926-001d096d84f2"></script>

您可以使用随机字符串甚至时间戳,只要更改查询参数,就会下载新的脚本文件。

【讨论】:

  • 我真的不想生成静态文件,而是让控制器操作返回 JavaScript(将被缓存)。我想我可以使用生成脚本的哈希值或生成时间戳来应用相同的主体。
  • 你是对的,相同的主体将适用于非静态文件。只要附加到 JavaScript 资源的静态 url 的查询字符串发生变化,浏览器就会下载更新的文件。时间戳或哈希都可以解决问题。
猜你喜欢
  • 1970-01-01
  • 2011-07-17
  • 2023-04-05
  • 2015-02-07
  • 2012-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-24
相关资源
最近更新 更多