Azure网站缓慢提供静态JS/CSS而不是二进制

Mat*_*ins 34 iis azure static-content azure-web-sites

我有一个Azure网站/ Web应用程序,提供静态JS和CSS文件非常慢,但似乎完全没有服务二进制文件.

为了测试这个问题,我上传了两个30MB的文件,一个是big.js,另一个是big.rar.如果我很幸运,JS文件的下载量大约为100KB/s.RAR文件的下载速度约为4,000KB/s.结果非常一致.

我已经检查了Fiddler并且两种情况都发生了gzip压缩.正如所料,JS文件使用MIME类型application/x-javascript发送,而RAR文件作为application/octet-stream提供.

我很难理解这一点 - 为什么IIS会比另一种更慢地提供一种静态内容?

Joh*_*eng 37

我们遇到了这个问题,并且能够在Azure支持团队的帮助下解决此问题.问题是慢速文件会使用TransferEncoding:Chuncked.他们建议我们强制静态压缩来解决这个问题.

我们必须添加以下内容<system.webServer>:

<serverRuntime enabled="true"  frequentHitThreshold="1"  frequentHitTimePeriod="00:00:20" />
Run Code Online (Sandbox Code Playgroud)


CC *_*Inc 5

详细说明John Tseng的回答:(从这里

正如您之前看到的,IIS 7 缓存静态文件的压缩版本。因此,如果请求到达压缩版本已经在缓存中的静态文件,则不需要再次压缩它。

但是如果缓存中没有压缩版本呢?IIS 7 会立即压缩文件并将其放入缓存中吗?答案是肯定的,但前提是文件被频繁请求。通过不压缩不经常请求的文件,IIS 7 节省了 CPU 使用率和缓存空间。

默认情况下,如果一个文件每 10 秒被请求两次或更多次,则认为该文件被频繁请求。

因此,为您的用户提供未压缩版本的 javascript 文件的原因是因为它不符合被压缩的默认阈值;换句话说,javascript 文件在 10 秒内没有被请求 2 次。

为了控制这一点,我们必须更改<serverRuntime>元素上的一个属性,该属性控制压缩:frequentHitThreshold. 为了让您的文件在被请求一次时被压缩,请将您的<serverRuntime>元素更改为如下所示:

<serverRuntime enabled="true" frequentHitThreshold="1" />
Run Code Online (Sandbox Code Playgroud)

如果您有许多 javascript 文件正在被提供并且您经常有用户,这将稍微影响您的 CPU 性能,但是如果您的用户经常足以通过压缩这些文件来影响 CPU,那么它们可能已经被压缩和缓存了!