.net平台的控件是一把双刃剑

   刚接触.net平台的时候,我觉得最有特色的东西就是它的控件(web控件,这面说的控件都指web控件),同时也因为这个东西,让我在刚接触.net不久后就放弃了.net的深入学习,转而去学习php。后来毕业后由于工作需要,又跟.net(c#)打交道,并对.net的控件感兴趣。从此开始了对.net进行了更加深入的理解。

    net控件让程序开发者可以抛弃学习html和javascript甚至css等前端页面的知识就能很快而且很简单的完成一个很漂亮的网页。这样有利于从事winform开发的程序员开发web程序,可以说微软的这个做法非常的巧妙。我刚开始接触net控件的时候就有这样的感觉,开发web网站跟开发winform一样了!但随着开发的网站越来越多,接触的需求也越来越多,让我更加害怕控件了。之前还很喜欢用。为什么害怕呢?因为.net的控件封装起来了部分的html和js,让一些我以前觉得很容易实现的效果,变得实现起来麻烦了,甚至走弯路或根本就没办法实现。那时候相当郁闷,很多东西不懂得怎么做就在后台用代码生成html再到前台输出代码。

   后来我就很想研究下控件到底是个什么东西?怎么做的。其实,我之前也用.ascx的控件,但我一直不承认这个就是控件,因为我感觉这个东西就跟asp的include是一样,怎么能叫控件呢?我当时理解的控件是像工具箱里面的那些有图标,然后可以拖拉的才叫控件。随着对net控件的深入研究,才明白这两钟存在方式不同控件其实没有很大区别,不过.ascx的控件开发起来简单点,而且方便点。

  .net平台的控件大多数是靠牺牲网站性能,来方便和提高开发者开发人员的效率。像.net自带的TextBox控件,我刚开始使用时觉得很神奇,怎么net的控件能够记住和保留我提交上去的数据呢?后来才发现原来.net的控件很多都会有一个或多个hidden的控件,有些是负责记住原来的数据的,有些是负责事件触发的标识。客户端提交后,在网站的后台(这里我把aspx文件叫前台,cs文件就叫后台)处理这些数据和事件。这样就是net控件的基本工作原理,而这些神秘的hidden在后台代码里面是怎么做的?.net有一种类似session的东西叫viewstate,其用法和session相类似,但使用起来有区别,session保存的是个人的会话,只要你的session在服务端没有消失,那么你随时可以连接上去,相对于用户,这是个全局的变量,而viewstate的生命周期只是针对于本页面,既只要是通过本页的提交来访问本页面的时候,这个值是会保存的,原理就是它会在客户端生成一个hidden来保存数据,但这个数据是序列化,所以你常常会发现,是net开发的页面一般都会看到它的源码里面有一串长长的乱七八糟的字符串,这个就是viewstate。

   viewstate让程序员的开发省去了很多其他操作,就能保持控件的视图状态。但同时也牺牲了网站的性能,很多本来没必要发送到客户端的数据都发送过来了,同时还生成了很多其他的脚本,导致页面臃肿杂乱,也影响了客户端的页面呈现和脚本执行的效率。

   所以net的控件是一把双刃剑,我们该如何取舍,具体得看您对系统性能的要求和理解,还有开发效率等综合起来的问题,让后再做决定。不过我觉得如果对于性能要求不是很高,又想快速开发的话,控件还是发挥着很好的作用,net控件比较合适做敏捷开发。以后我会发布一个系列自己写的控件,名字就叫:EasyTools。敬请期待。

posted @ 2009-04-13 22:04  hongkid  阅读(503)  评论(10编辑  收藏  举报