2015-11-30 14 views
1

我正在使用WebPageTest來測試Azure Web應用程序(ASP.Net vNext Web API/Angular)的性能。我獲得了「壓縮傳輸」和「緩存靜態內容」的F。未使用GZip壓縮的Azure Web應用程序

StackOverflow的搜索和谷歌之後,我添加了以下到我的web.config:

<urlCompression doStaticCompression="true" doDynamicCompression="true" /> 
    <httpCompression> 
     <dynamicTypes> 
     <clear /> 
     <remove mimeType="*/*" /> 
     <add enabled="true" mimeType="text/*"/> 
     <add enabled="true" mimeType="message/*"/> 
     <add enabled="true" mimeType="application/x-javascript"/> 
     <add enabled="true" mimeType="application/javascript"/> 
     <add enabled="true" mimeType="application/json"/> 
     <add enabled="false" mimeType="*/*"/> 
     <add enabled="true" mimeType="application/atom+xml"/> 
     <add enabled="true" mimeType="application/atom+xml;charset=utf-8"/> 
     </dynamicTypes> 
     <staticTypes> 
     <clear /> 
     <remove mimeType="*/*" /> 
     <add enabled="true" mimeType="text/*"/> 
     <add enabled="true" mimeType="message/*"/> 
     <add enabled="true" mimeType="application/javascript"/> 
     <add enabled="true" mimeType="application/atom+xml"/> 
     <add enabled="true" mimeType="application/xaml+xml"/> 
     <add enabled="true" mimeType="application/json"/> 
     <add enabled="false" mimeType="*/*"/> 
     </staticTypes> 
    </httpCompression> 

<staticContent> 
     <!-- Set expire headers to 30 days for static content--> 
     <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="30.00:00:00" /> 
</staticContent> 

我重新部署Web應用程序後,我重新運行測試,我他們兩人仍然獲得F。儘管我已經將這些設置添加到web.config,但Azure Web App似乎並未遵守它們。

此外,我發現一些Web應用程序層不允許壓縮,但我在S2上運行,並驗證它允許壓縮。

任何幫助,將不勝感激!

謝謝!

回答

8

默認情況下爲Azure Web Apps啓用gzip壓縮。您可以在您的站點LocalSiteRoot/Config/applicationhost.config中看到規則。查看響應頭(可以使用開發人員工具輕鬆完成)應該確認正在使用gzip。您的站點加載的其中一個資源可能未被壓縮,導致WebPageTest失敗。我會查看網絡捕獲和響應頭,並查看是否可以找到有問題的資源。

要轉到本地站點根目錄,可以使用FTP,或通過https://.scm.azurewebsites.net/DebugConsole訪問SCM站點,然後單擊globe圖標。 enter image description here

另外我懷疑你的2個JavaScript文件沒有被壓縮,因爲Content-Type頭沒有被填充,所以規則沒有捕獲它,因爲它不能識別mimetype。

+0

有未發送壓縮2個文件。兩者都是從我的Azure Web App提供的JavaScript文件。當我打開開發工具時,如果我查看從Google CDN提供的JavaScript文件,它具有「Content Encoding = gzip」的響應標頭。但是,當我查看由我的Azure Web App提供的2個JavaScript文件時,沒有這個響應頭。 – jkruer01

+0

如何訪問LocalSiteRoot/Config/applicationhost.config?我在Azure Portal中單擊我的Web應用程序,然後單擊「所有設置」。我沒有看到任何說LocalSiteRoot或配置。 – jkruer01

+0

我編輯了我的答案,以顯示如何訪問LocalSiteRoot並添加了我認爲可能存在的問題。 – theadriangreen

4

就在這裏備份@theadriangreen - 這將是一個標題問題。我發現在web.config中添加類型是不可靠的。

你需要做的是編輯存儲在azure最深的黑暗部分中的applicationHost.config文件。最簡單的方法是在Azure門戶或Kudu中安裝IIS管理器擴展。 Kudu可以通過.scm.azurewebsites.net訪問。

在那裏你可以編輯文件,它會爲你保存一個xdt - 一旦你重新啓動應用程序,你會發現xdt被應用。

或者,您可以將applicationHost.xdt添加到您的應用程序根目錄,然後您就可以開始使用了。這是一個示例。

<?xml version="1.0" encoding="utf-8"?> 
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
    <system.webServer> 
    <httpCompression> 
     <dynamicTypes> 
     <add mimeType="application/json;charset=utf-8" enabled="true" xdt:Transform="InsertAfter(/configuration/system.webServer/httpCompression/dynamicTypes/add[(@mimeType='application/json')])" /> 
     </dynamicTypes> 
    </httpCompression> 
    </system.webServer> 
</configuration> 

參考: -