TIPS-為WebControl過磅
0 |
在使用人數眾多或網路頻寬受限的情境下,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) |
ASP.webform1_aspx | 809 | 0 | 0 | |
System.Web.UI.LiteralControl | 174 | 0 | 0 | |
System.Web.UI.HtmlControls.HtmlHead | 46 | 0 | 0 | |
System.Web.UI.HtmlControls.HtmlTitle | 33 | 0 | 0 | |
System.Web.UI.LiteralControl | 14 | 0 | 0 | |
System.Web.UI.HtmlControls.HtmlForm | 555 | 0 | 0 | |
System.Web.UI.LiteralControl | 21 | 0 | 0 | |
System.Web.UI.WebControls.Label | 30 | 0 | 0 | |
System.Web.UI.WebControls.TextBox | 51 | 0 | 0 | |
System.Web.UI.WebControls.Button | 66 | 0 | 0 | |
System.Web.UI.LiteralControl | 18 | 0 | 0 | |
System.Web.UI.LiteralControl | 20 | 0 | 0 |
補充一點,ASP.NET 2.0在ViewState儲存策略上做了改變,採取Data/Control分離的做法,即使你將EnableViewState設為false時,資料本身不會被保留,但Control的一些外觀屬性如果放在ControlState中,就得以保存。詳細介紹可以看MSDN (中文說明)。
Comments
Be the first to post a comment