Html控件与Web控件的选择

探讨了ASP.NET中服务器端控件与HTML控件的性能对比及应用场景,分析了服务器端控件带来的开发效率提升及其对状态管理和事件处理的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


======================================================
注:本文源代码点此下载
======================================================

-----转自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^)/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值