灵活运用 ASP.NET 内建 ViewState 功能改善网站执行效率

主题:灵活运用 ASP.NET 内建 ViewState 功能改善网站执行效率
作者: Eric Huang
什么是ViewState
简单的说 ViewState 的功能就是保存网页上所有的资料,好处是当PostBack发生时,资料不会不见(包含Dropdownlist,checkbox ... 都会保持在你选的那一个)
例如说你在textbox中打了你的名子,PostBack后你的名子还是会出现在textbox中.

最常见到的ViewState运用就是用在Datagrid中,它让分页变的很简单.因为所有的资料已经输出并保存在Client Side. 不用每换一页就读取一次资料库,节省了系统的资源.

ViewState的好处与缺点
好处:不会占用系统资源 (记忆体)
缺点:网页会变大 (多了一串ViewState,会花比较久的时间Load)

ViewState支援的Type
strings, integers, Booleans, arrays, ArrayList, hashtable 和 custom TypeConverters

ViewState注意事项
以下是使用ViewState该注意的地方
1.ViewState 只会保留 <form runat="server"> </form>中的资料
2.ViewState 的预设值是开启的
3.ViewState 会增加网页的size (他储存了网页上所有的资料,所以如果你有一个很大的datagrid,那网页可能会超过100k..)
4.你可以用 Trace 来找出网页的size和ViewState的大小
< %@ Page Language="vb" Debug="true" Trace="true"%>
5.ViewState 可以关掉
< asp:datagrid EnbleViewState="false" ...%> 关掉这个datagrid 的 ViewState
or <%@ Page EnableViewState="false" ...%> 关掉整个网页的ViewState
or 在web.config中 <Pages EnableViewState="false" ../> 关掉整个网站的ViewState
6.如果你的网页不需要用到PostBack, 那你可以用 <form></form>取代<form runat="server">这样就不会产生ViewState了

ViewState使用时机
因为他是预设开的,所以在这里你就要决定何时"不使用" (缩小网页size,加快网页的开启)
1.如果你的网页不需要PostBack的话 - 关掉
2.如果你不需要用到 web control event 的话 - 关掉
3.像是Detail page这种没有互动的网页,也可以关掉
没有互动的网页:例如 Datagrid & Datalist 没有分页,编辑,删除 和 DataRepeater, 只显示资料的网页等等

安全性
ViewState 看起来好像是加密的,其实不是.下面看到的乱码是 base64-encoded ,目的是确保资料传输时不会被改掉.所以ViewState Code是可以被骇客还原的

<input type="hidden" name="__VIEWSTATE"
value="dDwxNTgMjE3ATl4Jx621Qn7dDw7bDxpPDE

那要如何加密呢?
首先先将 EnableViewState= 改成 EnableViewStateMAC= 如下
< %@Page EnableViewStateMAC="true" %>
再来在 web.config 或 Machine.config 中加入
< machineKey validation="3DES" />
这样就可以了. ASP.NET 就会根据你的machineKey去产生hash code 这样骇客就无法还原了

总结
ViewState是一个很方便的工具,它可以保存网页上的资料.运用的好,可以节省你很多时间去写Code.运用的不好会,会影响网页执行的效率.所以当你的网站建立好时,花点时间去检查和调整ViewState. 这样可以让你的网站变的更快更有效率.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章