======================================================
注:本文源代码点此下载
======================================================
-----转自jinglecat的言论
能不用服务器端控件尽量不用
能用html控件就不要用web控件
服务器端控件效率低
=======
前两句同意,至于后一句,
效率上,纯 html 肯定比runat=server低,对于runat=server,事实上asp.net内部帮我们作了许许多多的工作,比如
在asp/php/jsp中需要 '/>来维护两次post之间的状态
而帮我们做了这项工作,其内部也是使用request.form类获取值,然后经过一系列的处理周期(asp.net基于事件驱动)
在一个页面上,前者,只是一个字符流的输出,后者涉及对象的创建,控件层次的维护,大量相关页、控件事件同步,viewstate维护必然导致额外的性能损耗,
但它带来的是,【开发效率成倍的提升,完整的组件编程模式....】你不必再一堆的request.form中绕,你可以引用服务器控件对应,统一的编程模型
如
1.
stringtxt=requst.form[ "mytextboxclientname "];
vs
stringtxt2=mytextboxserverid.text;
2.
//js
document.form1.action="?action=delete "
//aspx.cs
if(requst.querystring[ "action "]=="delete "){
//执行删除操作...
}
vs
//aspx
//aspx.cs
voiddeletebutton_click(...
{
//执行删除
}
那么,如何选择?
a.
对于简单控件,如textboxcheckboxdropdownlist等等与htmlform表单元素直接对应的,假如我们系统维护多次提交之间他们的状态,未尝不可使用之,
至于效率,通常是可以忽略的,另外,你还处于win32前时代吗?
b.
对于gridview/datagrid/...这样的控件,以以及treeviewmenu...,前者实际上帮我们完成了asp中
while'遍历recordset
response.write( "
... ")
'....
这么一项工作,同时提供前述的完整的事件模型,便于我们服务器端编程操作【他们最大的诟病就是,假如你启用(默认启用)【viewstate】来维护状态,
那么你一次绑定显示的数据多,页面的大小会成倍的增长】
但是,同时,你也注意到,假如我通过viewstate来维护状态了,虽然页面变大了,但是多次提交之间,我不必从数据库再加载这些数据了,因为控件会才自动从viewstate中自动恢复
viewstate是通过存储在一个隐藏域来实现的,htmlinputhidden这是我们在asp/php/jsp常用的手段的.....
简单的分析之后,你会发现,asp.net就是一个“框架”,包装了很多东西,为我们建立了一个统一的web开发模型,这个模型最重要的就是,事件驱动——将客户端事件映射为
服务器事件,进而实现类型winapp的开发模式!
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就象做企业应用,当然“拖拽”方式,对于小型应用,足够应付!
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/