ViewState实现和优化
2009-11-29 12:19
274 查看
在ASP.NET中,我们经常用到的ViewState其实是Control里的一个属性(StageBag).
代码
当MaxPageStateField Length 属性设置为正数时,发送到客户端浏览器的视图状态将分为多个隐藏字段,并且每个字段的值都小于在MaxPageStateField Length 属性中指定的大小;而
如果MaxPageStateField Length 属性设置为负数(默认值)则表示不应将视图状态字段分成多个块区。另外,如果将MaxPageStateField Length 设置非常小,会导致性能降低。
视图状态和控件状态的总结
1.视图状态
视图状态是ASP.NET 页框架用于保存服务器与客户端往返过程之间的页面和控件值的方法。当呈现页的HTML 形式时,需要在回发过程中保留的页的当前状态和值将被序列化为Base64 编码的字符串,并输出到视图状态的隐藏字段中,即页面中HTML 源代码中的__VIEW STATE 隐藏字段,可以存储:字符串、整数、布尔值、Array 对象、ArrayList 对象、哈希表等数据类型。
视图状态有如下优点:
(1)节省服务端资源。由于视图状态是存放到隐藏字段(在HTML 代码结构中)传送到客户端的,因此不占用服务端资源。
(2)使用方便。默认已经开启视图状态。有些场合,如果控件没有注册服务端事件或者控件没有动态属情况可以将视图状态关闭,节省网络流量,提高页面呈现速度。
(3)视图状态通过散列码校检机制和使用3DES 等加密机制来保证数据安全。
(4)自定义存储位置。在Load 和Save 方法中可以自定义其存储位置。
视图状态有如下缺点:
(1)由于其存储到页面HTML 代码结构中,因此传输数据量大时,会严重影响性能。可以用视图状态分块机制,将数据分块存储,设置MaxPageStateField Length 属性。
(2)如果视图状态被禁用,则无法保存页面状态。
(3)虽然已经通过加密,但由于其是呈现到客户端隐藏字段区域,因此容易被篡改。
2.控件状态
有时,为了让控件正常工作,需要按顺序存储控件状态数据。例如,如果编写了一个自定义控件,其中使用了不同的选项卡来显示不同的信息,如TabTrip,FormView 等控件,为
了让自定义控件按预期的方式工作,该控件需要知道在往返行程之间选择了哪个选项卡。可以使用ViewState 属性来达到这一目的,然而,开发人员可以在页级别关闭视图状态,从而使
控件无法正常工作。为了解决此问题, ASP.NET 2.0 增加了一项新的存储功能:控件状态。ControlState 属性
允许您保持特定于某个控件的属性信息,且不能像ViewState 属性那样被关闭。简单地说,当禁用视图状态时, ControlState 能够完成ViewState 不能够完成的任务。
控件状态有如下优点:
(1)节省服务端资源。跟视图状态一样,控件状态存储在隐藏字段中,也不占用服务器资源。
(2)比视图状态更可靠。控件状态功能推出的一个重大原因就是,当视图状态被禁用时,它依然可以有效。
(3)自定义存储位置。在Load 和Save 方法中可以自定义其存储位置。
控件状态有如下缺点:
(1)由于其存储到页面HTML 代码结构中,因此传输数据量大时,会严重影响性能。
(2)视图状态可以用System.Web.UI.StateBag 类型的ViewState 来存储,也可以自定义编程。控件状态只能自定义编程。
代码
<system.web> <pages maxPageStateFieldLength="100" /> <system.web>
当MaxPageStateField Length 属性设置为正数时,发送到客户端浏览器的视图状态将分为多个隐藏字段,并且每个字段的值都小于在MaxPageStateField Length 属性中指定的大小;而
如果MaxPageStateField Length 属性设置为负数(默认值)则表示不应将视图状态字段分成多个块区。另外,如果将MaxPageStateField Length 设置非常小,会导致性能降低。
视图状态和控件状态的总结
1.视图状态
视图状态是ASP.NET 页框架用于保存服务器与客户端往返过程之间的页面和控件值的方法。当呈现页的HTML 形式时,需要在回发过程中保留的页的当前状态和值将被序列化为Base64 编码的字符串,并输出到视图状态的隐藏字段中,即页面中HTML 源代码中的__VIEW STATE 隐藏字段,可以存储:字符串、整数、布尔值、Array 对象、ArrayList 对象、哈希表等数据类型。
视图状态有如下优点:
(1)节省服务端资源。由于视图状态是存放到隐藏字段(在HTML 代码结构中)传送到客户端的,因此不占用服务端资源。
(2)使用方便。默认已经开启视图状态。有些场合,如果控件没有注册服务端事件或者控件没有动态属情况可以将视图状态关闭,节省网络流量,提高页面呈现速度。
(3)视图状态通过散列码校检机制和使用3DES 等加密机制来保证数据安全。
(4)自定义存储位置。在Load 和Save 方法中可以自定义其存储位置。
视图状态有如下缺点:
(1)由于其存储到页面HTML 代码结构中,因此传输数据量大时,会严重影响性能。可以用视图状态分块机制,将数据分块存储,设置MaxPageStateField Length 属性。
(2)如果视图状态被禁用,则无法保存页面状态。
(3)虽然已经通过加密,但由于其是呈现到客户端隐藏字段区域,因此容易被篡改。
2.控件状态
有时,为了让控件正常工作,需要按顺序存储控件状态数据。例如,如果编写了一个自定义控件,其中使用了不同的选项卡来显示不同的信息,如TabTrip,FormView 等控件,为
了让自定义控件按预期的方式工作,该控件需要知道在往返行程之间选择了哪个选项卡。可以使用ViewState 属性来达到这一目的,然而,开发人员可以在页级别关闭视图状态,从而使
控件无法正常工作。为了解决此问题, ASP.NET 2.0 增加了一项新的存储功能:控件状态。ControlState 属性
允许您保持特定于某个控件的属性信息,且不能像ViewState 属性那样被关闭。简单地说,当禁用视图状态时, ControlState 能够完成ViewState 不能够完成的任务。
控件状态有如下优点:
(1)节省服务端资源。跟视图状态一样,控件状态存储在隐藏字段中,也不占用服务器资源。
(2)比视图状态更可靠。控件状态功能推出的一个重大原因就是,当视图状态被禁用时,它依然可以有效。
(3)自定义存储位置。在Load 和Save 方法中可以自定义其存储位置。
控件状态有如下缺点:
(1)由于其存储到页面HTML 代码结构中,因此传输数据量大时,会严重影响性能。
(2)视图状态可以用System.Web.UI.StateBag 类型的ViewState 来存储,也可以自定义编程。控件状态只能自定义编程。
相关文章推荐
- ViewState实现和优化2--自定义压缩方法采用GZipStream压缩
- 【原创】项目性能优化全纪录(二) 把ViewState放在服务器端
- android UI 优化之<viewstub>实现View的延迟加载
- 网页优化系列三:使用压缩后置viewstate
- ViewPager、PagerTabStrip、FragmentPagerStateAdapter实现状态栏切换界面
- ASP.Net ViewState的实现
- android不继承FragmentActivity实现ViewPager+Fragment(标签的优化)
- Asp.Net与SEO - Viewstate优化终极解决方案
- 点一下添加label,并获取所有的label的text的值,和label的个数(ViewState方法实现)
- ASP.Net ViewState的实现
- 调整ViewState的位置,搜索引擎优化
- ASP.NET的页面生存周期和ViewState实现机制
- [asp.net]优化ViewState
- 重写PageStatePersister属性 自定义压缩方法来减小ViewState大小来优化页面加载时间
- ASP.Net ViewState的实现
- 利用ViewPager实现3D画廊效果及其图片加载优化
- ViewState优化——压缩技术
- NestedScrollWebview实现与优化
- Android 通过注入js实现读取webview中图片并放大的优化
- 不用风格的三态树控件的实现(ThreeStateTreeView)