寫WebForm很不得已的就是 ViewState
網頁載入速度如果變慢都會想從 ViewState 下手!!
花了些時間蒐集資料、拼湊,終於完成,趕緊做一下紀錄
==========
整理來源:
mrkt的程式學習筆記 整理網頁中的ViewState(一) - 壓縮ViewState
stackoverflow ASP.NET: Compress ViewState
==========
因為要減肥的只有一頁,以及 Kevin大大提到 「多經過壓縮以及解壓縮的程序,就勢必會增加主機CPU的Loading」
所以很偷懶的把code都寫在一起,直接複製即可使用
壓縮後的 ViewState 將命名成Code裡面取的 __COMPRESSED_VIEWSTATE
#region ViewState Compress #region -- Override PageState -- /// <summary> /// Saves the page state to persistence medium. /// </summary> /// <param name="viewState">State of the view.</param> protected override void SavePageStateToPersistenceMedium(object viewState) { CompressViewStateByBase64(viewState); } /// <summary> /// 載入任何儲存的檢視狀態資訊到 <see cref="T:System.Web.UI.Page"/> 物件。 /// </summary> /// <returns>儲存的檢視狀態。</returns> protected override object LoadPageStateFromPersistenceMedium() { return DecompressViewStateByBase64(); } #endregion private ObjectStateFormatter _formatter = new ObjectStateFormatter(); /// <summary> /// Compresses the view state by base64. /// </summary> /// <param name="viewState">State of the view.</param> public void CompressViewStateByBase64(object viewState) { MemoryStream ms = new MemoryStream(); _formatter.Serialize(ms, viewState); byte[] viewStateArray = ms.ToArray(); ClientScript.RegisterHiddenField( "__COMPRESSED_VIEWSTATE", Convert.ToBase64String(CompressViewState.Compress(viewStateArray)) ); } /// <summary> /// Decompresses the view state by base64. /// </summary> /// <returns></returns> public object DecompressViewStateByBase64() { string vsString = Request.Form["__COMPRESSED_VIEWSTATE"]; byte[] bytes = Convert.FromBase64String(vsString); bytes = CompressViewState.Decompress(bytes); return _formatter.Deserialize(Convert.ToBase64String(bytes)); } #endregion
後來其實有發現,兇手不是那肥肥的 ViewState
用來Demo的網頁上其實看不太出成效
工具部分,可以在Chrome 右鍵 -> 檢查,切換至 Network,F5讓要測試的網頁重新載入
BEFORE
AFTER
文章標籤
全站熱搜