用 ASP.NET 2.0 改進(jìn)的 ViewState 加快網(wǎng)站速度
2006/12/22 23:58:08

    如果您是個(gè)經(jīng)驗(yàn)豐富的 ASP.NET 開發(fā)人員,一提起 ViewState ,您可能會(huì)不寒而栗,因?yàn)槟氲降氖谴罅客ㄟ^“雞尾酒吸管”吸入的 Base64 編碼數(shù)據(jù)。除非采取步驟進(jìn)行預(yù)防,否則大部分 ASP.NET 頁面將有大量輔助數(shù)據(jù)被存儲(chǔ)在一個(gè)名為 __VIEWSTATE 的隱藏字段中,多數(shù)情況下,甚至不需要這個(gè)字段。
 
 
 
 
 
 
 
 
 
 
 
       
 
 
 
      瀏覽用 ASP.NET 生成的您喜愛的站點(diǎn),查看頁面源代碼,計(jì)算隱藏在 __VIEWSTATE 字段中的字符數(shù)。我嘗試了一下,數(shù)量為 800 到 7,800 個(gè)字符。
 
    當(dāng)然, ViewState 在 ASP.NET 中有個(gè)重要的角色。如果使用恰當(dāng),它能夠簡化頁面開發(fā),改進(jìn)用戶與站點(diǎn)的交互。如果置之不理,它能夠顯著增加站點(diǎn)響應(yīng)大小,在連接速度慢的情況下,使您的響應(yīng)時(shí)間更加緩慢。ASP.NET 2.0 的發(fā)布帶來了 ViewState 機(jī)制的一些改進(jìn),這使得 ViewState 使用更簡單,又不會(huì)防礙站點(diǎn)性能。這些改進(jìn)包括:減少編碼數(shù)量,采用控件狀態(tài)從內(nèi)容中分離出行為狀態(tài),以及智能集成數(shù)據(jù)綁定控件。 ViewState 基本原理

在介紹 ASP.NET 2.0 ViewState 的改進(jìn)之前,簡要總結(jié)目前版本中 ViewState 的用途和實(shí)現(xiàn)是適宜的。 ViewState 為 ASP.NET 開發(fā)人員解決了一個(gè)特定問題 — 保留服務(wù)器端不形成元素的控件的狀態(tài)。這很重要,因?yàn)?ASP.NET 中的大部分服務(wù)器端控件模型是根據(jù)這樣一個(gè)假設(shè)生成的,那就是 — 如果用戶回發(fā)到相同頁面,所有控件保持其狀態(tài)不變。也就是說,如果在處理請(qǐng)求期間修改任何控件的內(nèi)容,任何后續(xù) POST 請(qǐng)求回到相同頁面時(shí),您可以依賴于那些仍然存在的修改。作為一個(gè)活動(dòng)的 ViewState 示例,嘗試運(yùn)行圖 1 顯示的頁面。
每次按下 Submit 按鈕時(shí),_sum 范圍值遞增。因?yàn)?ViewState 在請(qǐng)求期間保持以前的值,因此它將從上一次顯示的值開始,顯示 1、2、3、4 等等。如果想知道 ViewState 不可用時(shí)發(fā)生的事情,嘗試添加 enableviewstate='false' 作為范圍元素的一個(gè)屬性。因?yàn)橐郧暗姆秶翟谡?qǐng)求處理時(shí)沒有傳播,所以不論頁面發(fā)布多少次,都將顯示值為 1。
在 ASP.NET 中, ViewState 完成基于控件的編程模型。如果沒有 ViewState ,一些控件(如文本框和下拉列表)在 POST 請(qǐng)求期間保持狀態(tài),而其他控件不保持,使用這些狀態(tài)各異的控件記錄一些特殊的情況是令人沮喪的體驗(yàn)。使用 ViewState ,開發(fā)人員能夠?qū)W⒂诰幊棠P秃陀脩艚缑妫挥脫?dān)心狀態(tài)保持。還能對(duì) ViewState 進(jìn)行哈希或加密,以防止用戶篡改或解碼。關(guān)于這個(gè)主題的更多信息,請(qǐng)參見在線書籍 Securing Your ASP.NET Application and Web Services 的第 19 章。
使用 ViewState 的另一個(gè)重要之處是在控件中發(fā)布服務(wù)器端更改事件。如果用戶改變了文本框中的值或切換了下拉列表中的選定元素,您就能夠注冊(cè)一個(gè)事件處理程序,引發(fā)事件時(shí),執(zhí)行代碼。這些控件比較其當(dāng)前值與以前值,如果有任何過程預(yù)訂更改事件,以前值隱式存儲(chǔ)在 ViewState 中。如果禁用一個(gè)控件的 ViewState ,而您正在處理該控件的更改通知事件,因?yàn)榭偸羌俣ㄒ郧爸蹬c窗體默認(rèn)值相同,所以更改通知事件不會(huì)正確激發(fā)。 ViewState 問題

正如我早前指出的,在 ASP.NET 1.x 中, ViewState 有很多問題。默認(rèn)情況下,它是啟用的,除非您知道在不需要使用時(shí)找到并禁用它,否則它能顯著增加頁面呈現(xiàn)的數(shù)據(jù)量。當(dāng)使用數(shù)據(jù)綁定控件時(shí),所有控件都使用 ViewState 保存回發(fā)后的狀態(tài),這將變得異常痛苦。作為一個(gè)簡單而生動(dòng)的示例,考慮圖 2 所示的 ASP.NET 頁面。
這個(gè)頁面有一個(gè) DataGrid 控件,該控件綁定對(duì) pubs 數(shù)據(jù)庫中 authors 表格進(jìn)行簡單查詢的結(jié)果。如果運(yùn)行這個(gè)頁面(對(duì)連接字符串做出必要改正),查看 ViewState 字段,您可能吃驚地發(fā)現(xiàn)里面有超過

下一頁
返回列表
返回首頁 主站蜘蛛池模板: 97午夜伦伦电影理论片| 久久精品国产大片免费观看| 精品国产美女福利到在线不卡| 国产成人精品影院狼色在线| 97性无码区免费| 影音先锋人妻啪啪av资源网站| 久久婷婷电影网| 欧美性大战久久久久久久| 优优里番acg※里番acg绅士黑| 色三级大全高清视频在线观看 | 宅男视频网站无需下载| 久久人人爽爽爽人久久久| 欧美一级欧美一级高清| 亚洲爆乳少妇无码激情| 男男肉动漫未删减版在线观看| 国产99久久亚洲综合精品| 香蕉视频在线观看免费 | 久久精品无码专区免费东京热| 欧美成在线播放| 亚洲综合日韩在线亚洲欧美专区| 精品国产_亚洲人成在线| 国产AV寂寞骚妇| 青青草国产免费| 国产成人精品a视频| 三级视频在线播放| 国产麻豆精品手机在线观看 | 4480新热播影院| 大伊香蕉在线观看视频wap| 一级免费黄色毛片| 成年在线网站免费观看无广告| 久久亚洲精品国产亚洲老地址| 最近中文字幕mv在线视频www | 美女被免费看视频网站| 国产亚洲人成在线影院| 麻豆一区二区三区蜜桃免费| 国产欧美日韩一区二区三区| 三上悠亚精品一区二区久久| 国产精品第100页| 91精品国产91久久久久久最新| 夜来香免费观看视频在线| xxxxx免费|