Html控件与Web控件的选择

-----转自Jinglecat的言论


能不用服务器端控件尽量不用
能用html控件就不要用web控件
服务器端控件效率低
=======
前两句同意,至于后一句,

    效率上,纯 html 肯定比   runat=server  低,对于   runat=server   ,事实上   asp.net   内部帮我们作了许许多多的工作,比如

在   asp/php/jsp   中需要<input   type=text   name=MyTextBoxName   value= ' <%   =Request.Form[ "MyTextBoxName "]   %> '   />来维护两次post之间的状态

而<asp:textbox/>   帮我们做了这项工作,其内部也是使用   Request.Form   类获取值,然后经过一系列的处理周期(asp.net基于事件驱动)

在一个页面上,前者,只是一个字符流的输出,后者涉及对象的创建,控件层次的维护,大量相关页、控件事件同步,ViewState维护必然导致额外的性能损耗,

但它带来的是,【开发效率成倍的提升,完整的组件编程模式....】你不必再一堆的   Request.Form   中绕,你可以引用服务器控件对应,统一的编程模型

1.
string   txt   =   Requst.Form[ "MyTextBoxClientName "];

VS

string   txt2   =   MyTextBoxServerID.Text;

2.

//   js
document.form1.action   =   "?action=delete "
//   aspx.cs
if(Requst.QueryString[ "action "]   ==   "Delete ")   {
      //   执行删除操作   ...
}

VS

//   aspx
<asp:Button   Click   =DeleteButton_Click   ...

//     aspx.cs
void   DeleteButton_Click(   ...
{
              //   执行删除
}

那么,如何选择?
A.
对于简单控件,如   TextBox   CheckBox   DropDownList  等等与   html   form   表单元素直接对应的,假如我们系统维护多次提交之间他们的状态,未尝不可使用之,
至于效率,通常是可以忽略的,另外,你还处于   Win32   前时代吗?

B.
对于   GridView/DataGrid/   ...     这样的控件,以以及   TreeView   Menu   ...,   前者实际上帮我们完成了   asp   中
while   '遍历   RecordSet
Response.Write( " <tr> <td> ... ")
'   ....

这么一项工作,同时提供前述的完整的事件模型,便于我们服务器端编程操作【他们最大的诟病就是,假如你启用(默认启用)【ViewState】   来维护状态,

那么你一次绑定显示的数据多,页面的大小会成倍的增长】

但是,同时,你也注意到,假如我通过   ViewState   来维护状态了,虽然页面变大了,但是多次提交之间,我不必从数据库再加载这些数据了,因为控件会才自动从   ViewState   中自动恢复

ViewState   是通过存储在一个隐藏域来实现的,html   input   hidden   这是我们在   asp/php/jsp   常用的手段的.....

简单的分析之后,你会发现,   ASP.NET   就是一个“框架”,包装了很多东西,为我们建立了一个统一的   Web   开发模型,   这个模型最重要的就是,事件驱动——将客户端事件映射为

服务器事件,进而实现类型   Win   App   的开发模式!

ASP.NET   有太多的特性,没有办法三言两语说清楚,
至于性能,你不能简单的说,用服务器控件,效率就低,


控件一般是给非专业人士准备的,就是只会拖动鼠标的那些人,专业开发人员很少用的;
==========
高手不见得就不用,runat=server,   一个性能优良的应用系统,是需要综合各方面的设计策略的,

从ASP迁移的过来的,多数会对   asp.net   产生疑惑,但是相信,具有传统web开发经验者,能够很快,理解其本质,了解其内在运行机制,

不管如何,他们都离不开最原始的   Requst/Response   这两个对现象!

系统性能   与   开发效率   需要一个   tradeoff   的过程,
毕竟,我们已经不在3.5英寸盘的时代,2004   年末我加一条256内存的是,240¥,还是现代的现在   512   的多少   1G   的多少?


从应用系统类型看,
除了,门户型的信息类网站之外(他们更多使用静态页),简单服务器控件可以放心使用,重量的服务器控件,根据设计策略而定
另外,假如基于纯   AJAX   ,那看什么框架了,轻量基本的如 AjaxPro,也就没有必要服务器控件了,通过   js   +   DOM+   dhtml  基本可以完成  UI   绘制了


总之呢,假如是大型系统,UI 层上性能提升不大,UI  层我们应该更加考虑的是【用户交互友好性】,如能够不必要 PostBack 尽量不要,但是也不要走向   AJAX   的极端,

性能关键还是各种“策略”,比如数据库设计,数据缓存.

当然   asp.net   也为   UI   层提供了【缓存机制】,这也是优于   ASP   的一大亮点,都说   asp.net   性能够不如   asp,

那是因为,他们没有充分的挖掘   ASP.NEt   的各种特性,以为,三下五除二,拖几个   GridView   +   xxxDataSource   就象做企业应用,当然“拖拽”方式,对于小型应用,足够应付!

posted @ 2011-08-20 10:15  Zicy  阅读(1000)  评论(1)    收藏  举报