2010-01-04 64 views
0

與將ASP.NET HTTP處理程序映射到靜態擴展如* .css有關的一些意外後果是什麼?將處理程序映射到靜態擴展

<add verb="*" path="handler.css" type="Web.HttpHandler.ThemeCssHandler" /> 

默認情況下,*的.css註冊爲applicationHost靜態內容(下IIS7):

<staticContent lockAttributes="isDocFooterFileName"> 
    <mimeMap fileExtension=".css" mimeType="text/css" /> 

通常不會被IIS獨自撐起更有效的靜態請求?

關鍵動機實際上是在其已知的擴展下提供動態CSS,而不是類似* .axd(爲了簡化和兼容OOTB高速緩存策略);但我們希望確保這不會降低非動態CSS請求的服務。

回答

1

處理CSS文件的常用方式是使用靜態文件處理程序,因此,替換您自己的處理程序可能會表現得像以前一樣好。細節取決於處理程序。

如果需要,您可以實際使用* .aspx處理程序(儘管需要更多配置)。但是,其中一個副作用是默認情況下所有動態內容都會標記爲Cache-Control: private,這會阻止代理進行緩存。

對於靜態文件,默認情況下也會啓用輸出緩存。如果你讓它們變成動態的,那麼你的處理器必須明確地啓用它。

+0

謝謝,瑞克;在客戶端上,請求將使用自定義的HttpCachePolicy傳遞與傳統* .css請求相同的頭文件。我更關心的是靜態文件通常由本機處理程序處理 - 例如, 。是否將託管處理程序與靜態擴展(如* .css)關聯會更改所有* .css請求的執行管道?另外,雖然我們還沒有證實這一點,但我會想象動態* .css仍然有資格進行內核緩存。 – Nariman 2010-01-04 21:30:07

+0

是的,處理程序是基於文件擴展名分配的,所以如果爲* .css設置一個,它將應用於所有CSS文件。但是,本機處理程序和託管程序本身之間的性能差異不會很大,除非您的計算機除了提供CSS文件外什麼也不做。如果沒有特別的注意,這個大的性能影響就在緩存方面。通過http.sys進行內核緩存仍然是可能的(因爲它適用於所有動態文件),但前提是必須選擇適當的HttpCachePolicy,這對於動態文件而言默認情況下不會執行。 – RickNZ 2010-01-04 23:47:43