最近忙于开发一套internet应用的信息系统,以前做企业内部管理系统,几乎不用考虑到的ViewState 的问题,导致一个表单录入竟然有300k-400k的大小。很显然在internet是不可行的,所以做了很多优化的办法,最后压缩到不到原来的1/10。
asp.net的控件开发模型,在一定程度上是成功的,然后控件开发模型带来的ViewState 的开销,如果开发不注意,会导致页面体积猛涨。
Cristian Civera 所开发的免费程序ViewStateAnalyzer http://lab.aspitalia.com/26/ViewStateAnalyzer200.aspx#eng
asp.net的控件开发模型,在一定程度上是成功的,然后控件开发模型带来的ViewState 的开销,如果开发不注意,会导致页面体积猛涨。
Cristian Civera 所开发的免费程序ViewStateAnalyzer http://lab.aspitalia.com/26/ViewStateAnalyzer200.aspx#eng
透过 Internet Exploer 附加 ToolBar 功能, 可以记录与分析 ASP.NET 2.0 ViewState 的内容, 并可选取两个被记录下来的 ViewState 进行比对,对于某些状况 (例如: The state information is invalid for this page a nd might be corrupted. 错误讯息) 的除错十分方便。 有兴趣的朋友可于此处下载,这是几个类似工具中做得比较好的一个。
顺便交流一下我的小经验:
1,尽量不要用asp.net自带的验证控件,在批量录入数据时大量的验证控件生成很多页面代码;
2,如果htmlcontrol能满足你的要求,就可以不用webcontrol;
3,很多时候用repeater也很不错,不一定都用gridview;
4,对于ViewState 比较大的页面,可以考虑压缩;
5,对于移动的应用,可以考虑把ViewState 放到session中;
6,用javascript动态创建控件,也能够压缩不少页面代码;
7,利用一些成熟的框架(如jquery),能够大大提高开发效率,提高UI体验,还得靠javascript做很多工作;
8,如果控件的ViewState没有必要,就要设置EnableViewState =false,对于gridview,ViewState有蛮多重要的信息(如分页信息),所以不能gridview.EnableViewState =false,但是可以用gridview.Controls[0].EnableViewState=false,以清除没有用的ViewState。