寫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

160819_CompressViewState_before.png

AFTER

160819_CompressViewState_after.png

 

 

arrow
arrow
    文章標籤
    ViewState webform Base-64
    全站熱搜

    皮卡周 發表在 痞客邦 留言(0) 人氣()