about meWedia Ajax
无组件开发模式 ... Bing ... ASP.NET ... 2 /1242 ... 1 year 8 months ago
在繁华的都市拼命挣扎着追逐内心的欲望却想着能有归隐山林,享受清贫,与自然融为一体的意境,返璞归真总是我们潜在的欲望。

我幸运的选择了在Web2.0的时代开始学习Web,我也幸运地在众多的技术当中选择了ASP.NET2.0,我也非常聪明的融入Ajax的开发,而尝试从整个底层上了解我所学习的.NET技术,当然这与我几乎会其它所有Web技术开发有关。对组件的开发让我对组件有了一个充分的认识,当我发现所有的组件无非是从事着一种可视化的开发的时候,我认识到组件实际上是以性能的损耗为代价的,当然也无可厚非的减低了学习者的难度和需要的知识体系。对于我这样一个效率的完美主义者来说,我发现另一种开发模式能全面解决这样一个效率问题,其它所有的结构并没有发生任何变化,唯一变化的只有表现层,我剔除掉了所有的组件,取而代之的是完全的字符串,我称之为“无组件开发模式”。那么无组件开发模式具有什么样的优点呢?

首先,既然是无组件,我们的Web应用程序就不存在任何需要将组件,自然Page实体就不会添加任何的子控件,也不需要维护任何的状态,从而避免了许许多多不必要的开销,并极大程度减少了对服务器的内存的损耗。我发现当使用无组件开发的时候,速度不仅仅是快了一点点,而是快了近40%,当用户越多时,这个效率越明显,速度的提升是无止境的。这个我想对于那些效率的追求者来说会感到兴奋吧。

其次,Cache将展现前所未有的魅力。以往我们开发的时候所有的动态数据,比如DataSet、DataView等类似的数据会使用Cache保存,甚至直接使用OutputCache指令了。这样能很大程度上提升ASP.NET的性能。但是在无组件开发模式,性能将得到更进一步的提升,保存的将不是DataSet、DataView,而是String。可是这样有什么好处呢?或许现在的您有这样的疑惑,如果您能认识到DataSet和XML有联系,那么离我们的答案就进了一步。String可是使我们原本20K的缓存变成4K,但如果优势仅仅体现在数据大小上,还不足以称道,更为重要的是免去了数据邦定。虽然使用DataSet缓存了,但是聪明的您会立马认识到您的Repeater或GridView控件依旧在每次回传的时候要邦定一次,这个对性能的损耗可能超出了您的想象,但是下面我将告诉您答案,也就是无组件开发模式的另一个优点。

摒弃反射机制。开发人员或许习惯了事用Eval()这样的函数来邦定数据,并且自我感觉良好,速度很快,但是我告诉您Eval是通过反射机制实现的,您会作何感性?假的吧?不,事实上就是这样,如果您不相信,可以在下面留言,我可以告诉您ASP.NET是如何实现的。现在您可以大概想象一下,当摒弃反射机制后,速度能得到怎样的提升。

然后呢,无组件开发需要结合Ajax。我建立无组件开发模式是建立在我对Ajax的开发上的,为什么使用Ajax,因为在回发的过程中,很多数据并不需要更新,这意味着许多组建并不需要重新Render,我们可以很容易在.aspx页面上使用if(!base.IsPostBack){ new ArticleCom().Render()}。这样就不会产生任何多余的消耗,可以说是几尽完美的程序。

最后,无组件开发模式通过Ajax,使您不得不将整个应用程序当成一个整体来考虑和运行,这也意味着您可以全面掌控每一个元件的运行,而这样做的意义是您可以将数据库联接减少到最低,从字节上减少需要回传的数据。也就是说,您可以将ASP.NET的效率提升至极限

当然无组件开发模式并不是什么问题都没有的。ASP.NET对性能的损耗换来的是简易,而对性能的极度挖掘必定是一个相反的过程。无组件开发模式对开发者的要求提升到一个前所未有的高度

首先,开发者必须从整体上了解ASP.NET的运行机制,必须对组件有实足的认识。其次开发者需要非常熟悉的不仅仅是C#,对XHTML、CSS、Ajax也需要达到精通的程度。最后,也是无组件开发模式最人厌的地方,无组件开发是不可视开发,对开发者自身有高度要求的同时,也存在着自身维护的问题,其维护将是一个令人头疼的过程。

好了,说了这么多,但是要想表述清楚我这一疯狂的想法也着实是大有难度,这还涉及到开发模式的问题,如果您一下子就懂了,那倒是比较奇怪的。在以后的过程中,我会慢慢阐述这套开发模式,并给出相应的例子。如果任何人对这比较有兴趣,可以与我探讨。
Bing ... 1 year 5 months ago
恩。。。写这篇文章的时候我想我还不够成熟,您说的我很赞同。最近跟@怪怪的对白中,我也了解到了这一点。实际上我那时有点急功近利了,哈哈,对于我那时说的请不要在意,在五一改版后,这些文章也会发生相应的更改的。谢谢您的回复。。。
acheqi ... 1 year 5 months ago
本身组件开发没有谁说过效率高,扩展和效率通常都是对立的,重要的不是是否摒弃某种,而是怎么在其中找到平衡点,没必要钻牛角尖
Name*
Email
Website
BoldItalicUnderlineJustify LeftJustify CenterJustify RightIndentOutdentBulled ListNumbered ListInsert LineCreate LinkUnlinkInsert Face
Submit