启用静态压缩后,IIS中的gzip js不会被压缩

5
我使用Squishit来缩小并捆绑JS,为了压缩打包文件,我启用了IIS 7.5中的选项(启用静态内容压缩)。问题是JS没有被压缩,我只得到了缩小后的js,但是如果我启用动态内容压缩,那么JS就会被压缩。现在动态压缩的问题是它不会缓存文件,并且每个请求都必须进行压缩,这需要CPU的时间。有人能帮我解决为什么JS在静态内容压缩模式下没有被压缩的问题吗?这是将JS发送到客户端的理想方法吗?
JS -> Minify JS (Squishit) -> Compress (Static /Dynamic)

你是使用SquishIt生成文件直接提供服务,还是通过某种资产控制器提供服务?如果你正在通过控制器提供捆绑包,那么你可能会遇到这个问题。如果你包含了SquishIt版本和更多关于你的设置的信息,那将有所帮助。 - AlexCuse
https://dev59.com/R2_Xa4cB1Zd3GeqP5tmm#15626988 - Brain2000
1个回答

11

当IIS认为文件是不经常使用时,静态文件的压缩由动态处理。一旦文件被认为是经常使用,则会被压缩和缓存。缓存版本将继续提供服务,直到再次变得不经常。在IIS中,您可以使用2个配置设置来配置频繁使用的文件:

system.webServer/serverRuntime:

  • frequentHitThreshold: 请求同一文件多少次后,才被认为是频繁使用并缓存?默认值为2。
  • frequentHitTimePeriod: 同一文件应在其中请求{frequentHitThreshold}次的时间间隔内,才能被缓存。默认值为10秒。

请注意,无论您设置的frequentHitTimePeriod是什么,如果一个经常使用的文件在1分钟后未被请求,它仍将变成不经常使用的文件。我不知道配置中是否有此设置。

例如,将frequentHitThreshold设置为1,将意味着该文件始终由IIS视为经常使用,即使是从第一次请求开始也是如此。这将绕过动态压缩,并仅通过静态压缩处理。

或者,您可以通过设置staticCompressionIgnoreHitFrequency为true来完全绕过命中频率:

appcmd set config -section:system.webServer/httpCompression /staticCompressionIgnoreHitFrequency:"True"

请注意,动态(默认为0)和静态(默认为7)压缩的压缩级别不同,因此将返回2个不同的文件大小。

此外,这也是我首次遇到这个问题的原因:即使您对两者使用相同的级别,相同文件的ETag在动态和静态压缩之间也不同。

希望这可以帮助您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接