2015-03-31 42 views
30

我有一个Azure网站/ Web应用程序,它非常慢,无法提供静态JS和CSS文件,但似乎完全正确的服务二进制文件。Azure网站缓慢服务静态JS/CSS,但不是二进制

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

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

我很努力地理解这一点 - 为什么IIS服务一种类型的静态内容比另一种慢得多?

+1

它在三分钟内下载了一个900KB的js文件 – 2015-05-02 19:32:49

+0

您是否曾经找到过解决方案?我实际上得到10 KB/s的文本文件,除非我指定范围请求 – makhdumi 2015-08-28 19:48:53

+0

你并不孤单.... http://stackoverflow.com/questions/33134991/long-waiting-ttfb-time-for- scripts-styles-on-azure-website – ymz 2016-01-19 23:51:44

回答

29

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

我们不得不添加以下<system.webServer>

<serverRuntime enabled="true" frequentHitThreshold="1" frequentHitTimePeriod="00:00:20" /> 
+0

为我工作:-)谢谢! – Christoph 2015-10-15 12:27:02

+0

这也适用于我! – ZarX 2016-01-20 13:12:07

+0

太棒了!在这里工作:) – Boland 2016-12-20 07:16:16

1

为了详细说明约翰曾雅妮的回答是:(从here

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

但是如果缓存中没有压缩版本呢?然后,IIS 7 会立即压缩文件并将其放入缓存中?答案 是的,但只有在频繁请求文件的情况下。通过不压缩非常少请求的文件,IIS 7会保存 CPU使用率和缓存空间。

默认情况下,如果一个文件被要求经常请求,如果它是每10秒请求两次或更多次的 。

所以,你的用户被送达一个未压缩版本的javascript文件的原因是因为它没有达到被压缩的默认阈值;换句话说,JavaScript文件在10秒内未被请求2次。

为了控制这一点,有一个属性,我们必须将<serverRuntime>元件,它控制压缩上改变:frequentHitThreshold。为了使您的文件时被请求一旦被压缩,改变你的<serverRuntime>元素,看起来像这样:如果你有被服务过众多JavaScript文件,你必须

<serverRuntime enabled="true" frequentHitThreshold="1" /> 

这将略微影响您的CPU性能用户经常使用,但如果用户经常足以影响CPU压缩这些文件,那么他们可能已经被压缩和缓存!