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 就象做企业应用,当然“拖拽”方式,对于小型应用,足够应付!


浙公网安备 33010602011771号