成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺析ASP.NET禁用ViewState

開發 后端
本文介紹ASP.NET禁用ViewState,以及介紹目標應用環境、頁面的性質和對ViewState和頁面事件的理解程度等。

前段時間由于程序出現了比較大的性能問題,視圖(View)之間的跳轉速度非常慢。通過Fiddler調試和分析,查找到是由于在視圖(View) 轉換(PostBack)過程中,客戶端給服務器端的發送字節數非常大,一般在30K以上,就相當于客戶端每次都要給服務器上傳大十K的數據量,這如果是比較好的網絡環境下完全是可以忽略的,但是目前的網絡環境確實還達不到這樣的要求。詳細請看《無刷新視圖跳轉的局限性》。針對這一情況,我的解決方案就是禁用頁面的ViewState,只有這樣才是最根本的解決辦法。原本還想寫一篇blog來好好批一下ViewState,當初想好的標題是“ASP.NET程序的性能殺手----ViewState”。現在看來,還好沒寫,要不還不被人批是“沒有真正會用 ASP.NET 的人”?(盡管確實還沒有真正全面認識ASP.NET)。

在jillzhang的blog《給頁面減減肥!》中給頁面減肥的辦法是對頁面進行壓縮。這確實是一種辦法,特別是當在硬件環境允許的條件下,可以帶來非常大的好處,一般體積都可以減小好幾倍。減小頁面體積還有一種辦法,那就是ASP.NET禁用ViewState,兩種方法并不是互斥的,而且我認為只有禁用ViewState后,頁面壓縮的效果才更明顯的。因為ViewState的值本身就是一些相對緊湊的字符,而HTML代碼則相對松散,(我也不是特別肯定這對壓縮有必然的聯系。)。最近一直在從事頁面速度的優化方面的工作,所以很多平常不注意的細節,它所造成的性能影響在這時候就體現出來了。一般的頁面(服務器控件比較多)如果ASP.NET禁用ViewState后,它的體積至少會減小一半。而且這一半的數據在很多情況都是沒用的(特別是在不需要PostBack的情況下,簡直就是累贅),如果這時候再加HTML壓縮的話,那壓縮比就不止3-5倍了。有一個頁面正常的大小(ASP.NET禁用ViewState后)是101,730 byte ,壓縮后變成了11,182 byte。說實話我也很驚訝這樣的壓縮比。通過這里可以看這組驚人數據。

那這一切是不是都是ASP.NET的錯呢?ViewState是不是就是“萬惡之源”呢?是,也不是。為什么呢?首先我們要正確認識ViewState存在的意義,更多的情況下MS是為我們這些新手快速入門而考慮的。正因為有了ViewState,讓我們開發B/S應用程序能夠按照我們的正常的思維邏輯來進行。而屏蔽了在PostBack時,還要去初始化一堆的頁面控件,給這個控件還原我們提交的請求值等等,想想這對于我們來說是多少復雜而麻煩的一項工作啊!而不是像我們現在這樣,直接在PostBack事件取我們想要的控件的值這么簡單。而默認情況下ViewState=true,也是在為初學者著想的,不至于讓一個初學ASP.NET的同學在寫postback事件時出現一些奇怪的錯誤而灰心喪氣,提高門坎。一段個人的理解可能還不能讓一些朋友看得很明白,關于ViewState的討論已經很多了,但是最重要一點就是理解頁面的執行生命周期。如果把下面這張圖啃下去后你也許就會有深刻理解了。

 


談點有意義的吧?是禁還是用?決定因素有以下幾點(個人理解):

1.你的目標應用環境。

這是最根本的,如果你的ASP.NET應用程序只在局域網(Intertrant)內應用的話,那非常棒,我們完全可以忽略ViewState存在的影響。

2.頁面的性質。

如果你的頁面是一種信息瀏覽的性質,而完全沒有PostBack事件的話。這里的ViewState就完全是可以被消滅的。反之,如果頁面中有PostBack事件,盡管只有一個,那你如果禁用了ViewState,都有可能產生不可預期的錯誤。

3.你對ViewState和頁面事件的理解程度。

如果你很理解頁面的生命周期和執行過程,那你完全可以根據需要來設置哪些控件需要打開ViewState,哪些控件可以禁用ViewState,做到按需使用,合理使用ViewState。達到性能的最優化。

4.開發人員的勤勞程度和外在因素。

如果你很勤勞,而且你也了解了ViewState的原理,你可以按需使用。但是如果你很懶,而且很多外在因素(團隊其它成員的理解程度)你沒無法控制的話,那就直接禁用頁面的ViewState好了。當然前提是你必須知道如果去正確處理禁用ViewState后遺留下的問題,這些問題一般都是一些讓人難以捉摸的東西。如果你都是一一的解決了這些問題的話,那對ViewState的感情就更深了。呵呵。

可以這么說ViewState是頁面控件狀態的一個副本,比如一個DropDownList控件,它在ASP.NET頁面上要是以select HTML tag 來展現的,而這時在ViewState中還保存著它所有Item的副本。當我們在postback的時候為什么能夠取到值呢?就是因為ViewState,它會在ProcessPostData(before Load)之前將這個副本還原成了DropDownList的Item了。然后在ProcessPostData方法中將表單提交的選擇項設置為 DropDownList的SelectedValue。以前這一過程我們無需參與。而當ASP.NET禁用ViewState后,我們就要手動去維護DropDownList回發情況下的Item初始化,利用Request.Params(或Request.Form)取得SelectedValue值等等,而這些工作有可能就要在Page_Load事件之前做了。

【編輯推薦】

  1. 微軟發布ASP.NET MVC 2預覽版 多項功能更新
  2. ASP.NET服務器自定義控件安全準則
  3. ASP.NET編程規范之編碼規范淺析
  4. 關于ASP.NET Session的一點認識
  5. ASP.NET編程工具ASP.NET Web Matrix詳細介紹
責任編輯:佚名 來源: IT168
相關推薦

2009-08-05 15:01:04

ASP.NET應用Vi

2009-07-28 16:42:02

ViewState技術ASP.NET應用

2009-07-28 13:39:44

加載ViewStateASP.NET

2009-08-04 12:29:57

ViewState概念ASP.NET

2009-08-04 17:20:37

PostBack和ViASP.NET

2009-07-20 15:19:52

ViewState本質ASP.NET

2009-08-05 18:36:12

ASP.NET Che

2009-07-24 13:41:15

ASP.NET AJA

2009-08-05 15:50:13

ASP.NET優點

2009-07-31 12:43:59

ASP.NET MVC

2009-08-10 13:32:15

ASP.NET TimASP.NET組件設計

2009-07-29 09:34:54

IsPostBack屬ASP.NET

2009-08-04 17:16:16

ASP.NET代碼優化

2009-08-05 16:17:29

ASP.NET For

2009-08-05 16:50:09

ASP.NET For

2009-07-24 18:02:46

ASP.NET編程

2009-08-05 16:53:14

ASP.NET組件設計

2009-08-03 10:07:20

ASP.NET Ses

2009-08-10 14:55:43

ASP.NET htt

2009-08-05 13:16:43

ASP.NET URL
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 午夜激情免费视频 | 午夜网站视频 | 午夜免费视频 | 久久亚洲春色中文字幕久久久 | 国产精品国产成人国产三级 | 中文字幕97| 成人超碰 | 亚洲精品乱码久久久久久蜜桃91 | 亚洲免费成人av | 国产精品一区二区久久久久 | 日韩欧美国产精品一区二区三区 | 国产视频精品在线观看 | 欧美精品久久久久 | 亚洲福利一区二区 | 色视频网站 | 人和拘一级毛片c | 91欧美激情一区二区三区成人 | 欧美视频 亚洲视频 | 亚洲精品99 | 久草在线在线精品观看 | 欧美精品国产一区二区 | av天天干 | 久久久久久久久99精品 | 亚洲aⅴ | 日韩有码一区 | 国产香蕉视频在线播放 | 亚洲精品视频在线观看免费 | 日日摸日日爽 | 福利精品 | 国产精品1区 | 中文字幕在线观 | 欧美日韩一区二区三区在线观看 | 国产精品久久久久久妇女6080 | 中午字幕在线观看 | 激情 亚洲| 在线免费观看a级片 | 最新午夜综合福利视频 | 操射视频 | 天天弄天天操 | 成人午夜视频在线观看 | 在线一区二区三区 |