我的作品中的建築師最近閱讀Yahoo!'s Exceptional Performance Best Practices指南,它指出對於JavaScript,CSS和圖像等頁面使用的資源使用遠期Expires標題。這個想法是你爲未來的這些資源設置一個Expires頭文件,這樣它們總是被瀏覽器緩存,當我們改變文件並因此需要瀏覽器再次請求資源而不是使用它的緩存時,改變文件名通過添加一個版本號。ASP.NET:合法的體系結構/ HttpModule的擔憂?
雖然沒有將它融入到我們的構建過程中,但他有另一個想法。我們會僞造它,而不是在每個版本中更改源文件和服務器磁盤上的文件名(授予,這將是單調乏味的),我們將僞造它。他的計劃是在所述資源上設置遠期到期,然後實施兩個HttpModules。
一個模塊會在我們的ASPX和HTML頁面出來之前攔截所有的Response流,查找資源鏈接,並查找作爲文件上次修改日期的版本參數。另一個HttpModule將處理所有資源請求,並簡單地忽略該地址的版本部分。這樣,瀏覽器每次在磁盤上更改時都會請求一個新的資源文件,而不必實際更改磁盤上文件的名稱。
有意義嗎?
我的問題涉及到重寫ASPX/HTML頁面響應流的模塊。他只是在<script>
和<img>
標記的「src」屬性以及<link>
標記的「href」屬性上應用一堆Regex.Replace()。對於內容類型爲「text/html」的服務器上的每個請求都會發生這種情況。可能每分鐘數百或數千。
據我所知,HttpModules掛鉤到IIS管道中,但是這需要在IIS發送HTTP響應所需的時間內增加一個令人望而窒息的延遲。沒有?你怎麼看?
我認爲如果你在構建過程中這樣做(實際上發佈過程會更好),算法將是相同的,唯一的區別是你只執行一次操作,而不是每次請求。 – 2009-11-18 00:12:10