簡體   English   中英

HttpHandler與HttpModule在ASP.NET頁面上重寫渲染功能

[英]HttpHandler vs HttpModule for Overriding Render Function on ASP.NET Page

我正在嘗試在生成的頁面上找到所有CSS標簽

因此,據我了解,有兩種方法可以執行此操作...

  1. 直接在ASP.NET頁面上重寫該函數,並在HTML中注入引用某些ashx(css.ashx)頁面(HttpHandler)的鏈接標記,然后該頁面將讀取所有CSS文件並將它們作為響應一起全部發送出去。 對所有其他頁面執行相同的覆蓋。

要么

  1. 使用HttpModule,它使用相同的方法,但不需要在每個ASP.NET頁上不斷重寫Render函數。

每個優點/缺點是什么?你們推薦什么?

謝謝

我認為您要解決的問題是對CSS文件的單個請求,而不是對所有CSS文件的多個請求。

我認為您的解決方案都不起作用。 如果我了解您在做什么。 如果獲取所有請求的文件並添加單個鏈接以處理聚合版本,那么如何確定發出請求時實際在處理程序中放入了什么?

更好的解決方案是在母版頁中向處理程序添加單個鏈接。 然后,您的處理程序聚合css文件,對其進行壓縮,緩存並輸出。

編輯:解決評論: “我在構建過程中最小化...我使用IIS壓縮...聚合的版本看起來像這樣css.ashx?file1.css,file2.css,someOtherfile.css文件是分開的我用邏輯來處理...然后我可以在響應中添加緩存和自定義標頭。...明白嗎?”

在我看來。 創建每個頁面請求的鏈接似乎有點愚蠢。 似乎沒有必要。 這個概念很好,這是我做的(不同),但是我不同意您的方法。

我看過許多博客文章,這些文章詳細說明了構建過程中的最小化,但是,如果您需要對CSS進行較小的更改,則不能僅在服務器上快速跳轉,更改值並完成該操作,實際上您需要再次完成構建過程並上傳單個文件。

同樣,我也不認為將所有文件都作為參數是一個好主意,因為您為每個頁面創建了許多不同的URL。

我這樣做的方法是創建一個具有2個查詢字符串值的單一處理程序。 密鑰和版本。

密鑰位於web.config應用程序設置中,以逗號分隔的css文件字符串包含在內。

向處理程序發出請求,它在緩存中查找鍵/版本,如果不存在,則從web.config中獲取值,加載所有文件,將它們縮小,然后壓縮並緩存。 添加所有標頭並輸出請求。

編輯2:您可以執行的另一種方法是僅具有單個鏈接,並在構建過程中進行合並/最小化。 即使您合並了一些主頁上未使用的css文件,這些文件也應該相對較小,並且由於它們已被緩存,因此您可以加快第二頁請求的請求速度。

在您的方案中,您需要瀏覽器發出對已經擁有的CSS文件的請求,再加上第二頁中可能包含的其他CSS文件。 (如果有道理)

主頁-css.ashx?files = css1.css,css2.css,css3.css
關於頁面-css.ashx?files = css1.css,css3.css

這毫無意義,因為您可以重用首頁中的CSS來呈現About頁面。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM