Tuesday, April 29, 2008 - 文章

TIPS-為WebControl過磅

在使用人數眾多或網路頻寬受限的情境下,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 UniqueID Type Render Size Bytes (including children) ViewState Size Bytes (excluding children) ControlState Size Bytes (excluding children)
__Page ASP.webform1_aspx 809 0 0
    ctl02 System.Web.UI.LiteralControl 174 0 0
    ctl00 System.Web.UI.HtmlControls.HtmlHead 46 0 0
        ctl01 System.Web.UI.HtmlControls.HtmlTitle 33 0 0
    ctl03 System.Web.UI.LiteralControl 14 0 0
    form1 System.Web.UI.HtmlControls.HtmlForm 555 0 0
        ctl04 System.Web.UI.LiteralControl 21 0 0
        Label1 System.Web.UI.WebControls.Label 30 0 0
        TextBox1 System.Web.UI.WebControls.TextBox 51 0 0
        Button1 System.Web.UI.WebControls.Button 66 0 0
        ctl05 System.Web.UI.LiteralControl 18 0 0
    ctl06 System.Web.UI.LiteralControl 20 0 0

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

搜尋

Go

<April 2008>
SunMonTueWedThuFriSat
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910
 
RSS
【工商服務】
最新回應

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


BlogLook Score and Rank

Syndication