在使用人數眾多或網路頻寬受限的情境下,Web Server與Browser間傳輸資料量變得格外重要,跟航空公司對行李重量"斤斤計較"一般。除了Web Control產生的HTML之外,另一項隱藏成本是ViewState,在頁面上無嗅無味,但每次檢視頁面時都會千里迢迢從Web送到Client,PostBack時又風塵僕僕地從Browser趕回Web Server,殺傷力驚人。

要深究網頁的傳輸量,除了借用Fiddler、HttpWatch這類工具去測量HTTP往來資料量外,ASP.NET本身有個好功能,可以分析各Web Control所"貢獻"的HTML內容大小及ViewState大小,等於可以為每個Web Control精密過磅,找出拖累傳輸效能的元凶。

方法很簡單,在ASPX宣告上加上Trace="true"即可,例如:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="WebForm1.aspx.cs" Inherits="WebForm1" Trace="true" %>

此時再檢視網頁,你就可以看到如下的資料量拆解分析,很好用吧!

Control Tree
Control UniqueIDTypeRender Size Bytes (including children)ViewState Size Bytes (excluding children)ControlState Size Bytes (excluding children)
__PageASP.webform1_aspx80900
    ctl02System.Web.UI.LiteralControl17400
    ctl00System.Web.UI.HtmlControls.HtmlHead4600
        ctl01System.Web.UI.HtmlControls.HtmlTitle3300
    ctl03System.Web.UI.LiteralControl1400
    form1System.Web.UI.HtmlControls.HtmlForm55500
        ctl04System.Web.UI.LiteralControl2100
        Label1System.Web.UI.WebControls.Label3000
        TextBox1System.Web.UI.WebControls.TextBox5100
        Button1System.Web.UI.WebControls.Button6600
        ctl05System.Web.UI.LiteralControl1800
    ctl06System.Web.UI.LiteralControl2000

補充一點,ASP.NET 2.0在ViewState儲存策略上做了改變,採取Data/Control分離的做法,即使你將EnableViewState設為false時,資料本身不會被保留,但Control的一些外觀屬性如果放在ControlState中,就得以保存。詳細介紹可以看MSDN (中文說明)。


Comments

Be the first to post a comment

Post a comment