2015-03-31 41 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壓縮這些文件,那麼他們可能已經被壓縮和緩存!