ASP.NET有了ViewState變得異常強大,同時,也為人"詬病"。
站在用戶的角度思考問題,與客戶深入溝通,找到界首網(wǎng)站設(shè)計與界首網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名申請、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋界首地區(qū)。往往你能在很多入門的書籍中看到:請謹慎或者禁用ViewState 這樣的字眼。
它會讓你的站點和用戶交互起來很好很強大,也會增加頁面的體積,讓你的帶寬資源變得很差很窘迫。
真的是魚和熊掌不可兼得?未必。
我們拿一個實例來分析,找到解決問題的思路,而不是一刀切的思維模式。
------------------------
【空間換時間】
我們新建一個網(wǎng)站,使用默認的Default.aspx頁面,給它拖拽一個GridView控件,然后顯示幾條數(shù)據(jù)看看。
很簡單是吧,看看它的體積有多大:
它也生成了一堆體積龐大的ViewState:
在實際工程中,這么大容量的頁面體積,難免會導(dǎo)致網(wǎng)絡(luò)傳輸過程中有點緩慢。
----------------------------
恩,其實這個ViewState有三種保存形式:
一個是上面圖中的【也是默認的】,推送到客戶端瀏覽器;
一個是保存在服務(wù)器內(nèi)存里【cache】;
一個是保存在服務(wù)器硬盤中。
這三種方式,我們選擇哪個?
個人建議,保存在服務(wù)器硬盤中;
因為,如果存儲在內(nèi)存里,不能確保它的穩(wěn)定性,消失了怎么辦?
---------------------------------
同樣的頁面,我們保存到服務(wù)器硬盤中,是否有所改觀呢?
先不貼代碼,先看看療效。
【ViewState存儲到硬盤之后】
一眼看上去,頁面代碼整潔多了,以前體積龐大的字符串現(xiàn)在成了一行有ID的標示。
那頁面體積呢?
體積縮小了接近50%,那么,既然我們沒有禁用ViewState,那我們的視圖狀態(tài)哪里去了?
我把它保存在服務(wù)器磁盤中了。
這樣,既不影響用戶體驗,又減少了頁面體積,頁面加載的速度自然就提升了。
【當然,視圖狀態(tài)為了安全,可以加密,這在本文末端有詳細的代碼示例】
---------------------------
該演示一下代碼了,先在網(wǎng)站下創(chuàng)建一個文件夾存儲視圖狀態(tài)的文件:
然后,添加一個類,來保存視圖狀態(tài)【紅線部分自己多注意】:
然后,如果有那個頁面想縮小體,就修改頁面的基類,讓頁面從我們的這個管理類中派生:
就這么簡單,怎么樣,心動了吧?
快去動手試試吧!
----------------------------------
當然,如果你的服務(wù)器帶寬資源很出色,就不一定不需要我的方法來降低網(wǎng)絡(luò)負載。
有可能你需要另外一個方法:
《ViewState加密【保護好你的視圖狀態(tài)】》
如果你給視圖狀態(tài)加密了,那加密和解密之間,要耗費一定的性能。
話說,上次看美國國防部的網(wǎng)站,視圖狀態(tài)就加密了。。。
人家不缺$$,肯定不會在乎加密解密的性能了。。。