2

我希望将 SquishIt 与我们的 web 应用程序集成。我从本地测试中注意到的是,SquishIt 只生成一次文件。根据其他 SO 答案并阅读 SquishIt 代码,我认为如果 HttpCache 不包含生成的散列键的值,则会发生文件生成。

如果没有重新启动应用程序,或者没有清除 HttpCache,如果我删除了生成的缩小文件,那么 SquishIt 不会重新创建文件。

如果文件不存在,有什么方法可以强制 SquishIt 重新创建文件?

早些时候我们使用 RequestReduce,我们注意到如果只编辑 css/js 文件(即,未编辑 web.config 并且未重新启动应用程序),它并不总是能够获取 css/js 更改。为确保获取更改,我们始终在部署时删除所有生成的文件。

  1. SquishIt 是否总是检测到更改的代码,即使 web.config 没有被修改,应用程序没有重新启动并且 HttpCache 没有被清除?

    [BundleCache.Add] ( https://github.com/jetheredge/SquishIt/blob/master/SquishIt.Framework/BundleCache.cs#L40-54 ) 方法的代码有助于回答这个问题

  2. 我可以通过简单地删除生成的文件来强制 SquishIt 生成文件吗?

    在考虑了我需要处理的场景之后,这是一个错误的问题。

编辑:

  1. 这些生成的文件发送到客户端的缓存头是什么?

我的情况如下。我从默认的 JS minifier 切换到 JsMinMinifier。删除文件(RenderOnlyIfOutputFileIsMissing设置)并重新启动应用程序后,生成了缩小文件。但是,它们与以前的文件具有相同的名称(我错误地认为它会具有不同的名称)。

刷新我的浏览器显示新生成的文件是由服务器发送的。这怎么发生的?如果资产上设置了长过期缓存标头,则浏览器不应该从服务器请求新文件。(检查 Firebug 中的资产,我无法理解缓存策略。对我来说,它看起来像是设置为缓存几分钟)。

编辑2:

我的收获是,没有必要删除生成的文件来导致重新生成。如果相应的源文件发生变化,SquishIt 将生成一个适当的文件。

4

1 回答 1

3
  1. 它应该 - 我们正在为文件(而不是生成的文件)添加缓存依赖项,因此如果编辑其中一个文件,则捆绑缓存中的条目应该无效。请参见BundleCache.Add

  2. 否 - 一旦条目位于捆绑缓存中,我们假设输出文件将在那里,因此您最终会找不到该文件。这是设计使然,我们还没有真正听到令人信服的反对它的案例。

部署时删除生成的文件应该没问题,即使不是绝对必要的 - 你不需要重新启动应用程序吗?

如果您真的担心文件挥之不去,您可能需要考虑在没有文件系统的情况下使用 SquishIt

于 2013-06-13T13:34:13.800 回答