來源:北大青鳥飛迅校區(qū)|發(fā)布時間:2013-05-02 18:35:52
本文是我對ASP.NET頁面載入速度提高的一些做法,這些做法分為以下部分:1.采用 HTTP Module 控制頁面的生命周期。2.自定義Response.Filter得到輸出流stream生成動態(tài)頁面的靜態(tài)內容(磁盤緩存
本文是我對ASP.NET頁面載入速度提高的一些做法,這些做法分為以下部分:
1.采用 HTTP Module 控制頁面的生命周期。
2.自定義Response.Filter得到輸出流stream生成動態(tài)頁面的靜態(tài)內容(磁盤緩存)。
3.頁面GZIP壓縮。
4.OutputCache 編程方式輸出頁面緩存。
5.刪除頁面空白字符串。(類似Google)
6.完全刪除ViewState。
7.刪除服務器控件生成的垃圾NamingContainer。
8.使用計劃任務按時生成頁面。(本文不包含該做法的實現)
9.JS,CSS壓縮、合并、緩存,圖片緩存。(限于文章篇幅,本文不包含該做法的實現)
10.緩存破壞。(不包含第9做法的實現)
針對上述做法,我們首先需要一個 HTTP 模塊,它是整個頁面流程的入口和核心。
一、自定義Response.Filter得到輸出流stream生成動態(tài)頁面的靜態(tài)內容(磁盤緩存)
如下的代碼我們可以看出,我們以 request.RawUrl 為緩存基礎,因為它可以包含任意的QueryString變量,然后我們用MD5加密RawUrl 得到服務器本地文件名的變量,再實例化一個FileInfo操作該文件,如果文件最后一次生成時間小于7天,我們就使用.Net2.0新增的TransmitFile方法將存儲文件的靜態(tài)內容發(fā)送到瀏覽器。如果文件不存在,我們就操作 response.Filter 得到的 Stream 傳遞給 CommonFilter 類,并利用FileStream寫入動態(tài)頁面的內容到靜態(tài)文件中。
namespace ASPNET_CL.Code.HttpModules { public class CommonModule : IHttpModule { public void Init( HttpApplication application ) { application.BeginRequest += Application_BeginRequest; } private void Application_BeginRequest( object sender, EventArgs e ) { var context = HttpContext.Current; var request = context.Request; var url = request.RawUrl; var response = context.Response; var path = GetPath( url ); var file = new FileInfo( path ); if ( DateTime.Now.Subtract( file.LastWriteTime ).TotalDays < 7 ) { response.TransmitFile( path ); response.End(); return; } try { var stream = file.OpenWrite(); response.Filter = new CommonFilter( response.Filter, stream ); } catch ( Exception ) { //Log.Insert(""); } } public void Dispose() { } private static string GetPath( string url ) { var hash = Hash( url ); string fold = HttpContext.Current.Server.MapPath( "~/Temp/" ); return string.Concat( fold, hash ); } private static string Hash( string url ) { url = url.ToUpperInvariant();
varmd5= new System.Security.Cryptography.MD5CryptoServiceProvider(); varbs=md5.ComputeHash(Encoding.ASCII.GetBytes(url)); vars= new StringBuilder(); foreach (varb in bs){ s.Append(b.ToString( x2 ).ToL
招生熱線: 4008-0731-86 / 0731-82186801
學校地址: 長沙市天心區(qū)團結路6號
Copyright © 2006 | 湖南大計信息科技有限公司 版權所有
湘ICP備14017520號-3