WediaAjax诚挚邀请大家一起帮忙写Demo
...
Bing
...
Diary
...
11
/1182
...
1 year 6 months ago
大家好,发这篇文章的目的是希望能认识到更多的朋友,并帮助我一起做完我做了近半年的开发。
在去年Ajax技术最为红火的时候我进入了Ajax的学习阶段,并非常喜欢当时为ASP.NET量身定做的MagicAjx这一小型框架,当然当时还有代号为Atlas的微软的一套Ajax Framework,前者功能有限,但效率还不错,后者相当庞大,但效率太低。当时我开始在我的Blog当中引入Ajax的元素,并渐渐发现整个Blog可以当成一个整体而考虑而非单个逻辑的简单组合,这样一来,我们保持原有的开发模式不变的情况下,就能将Blog系统整体化,于是就产生了所谓的完全无刷新的桌面Blog,对于这种小中型网站的开发,这是一个相当不错的选择。于是我需要一套在安全性上没有问题,并且能帮助我进行开发的这样一套Ajax,很欣慰当时的Atlas能帮助我实现这一宿愿,但渐渐地发现Atlas的效率极低,执行速度、代码规整性、开发灵活性都相当的低下,并且不支持浏览器的前进和后退功能。另外当时网络上一些所谓的“牛人”都在不停的争论如何选择哪个框架 ,Atlas有什么好,这些控件该如何使用,如何提高效率……。我感觉这些“牛人”都太跟风了,什么嘛,又不是什么太难得东西,为什么国人就没有自己的一套Ajax库?为什么这些领头的“牛人”不是树立榜样,而是标榜别人?这让我在一气之下,决定开发自己的一套Ajax库,于是我开始分析整个MagicAjax和Atlas的所有代码,一个半月的调试后,我发现我对它们的两者的根本有了相当的认识,尤其是对MagicAjax,因为它小的缘故,我几乎分析完了它的每一行代码,并弄清楚了这些代码的含义。果然不出所料,这两个库在服务器端的效率都相当的低下,并且随着开发度的加大,它们表现出的效率更是大打折扣,灵活性也是低的可怕,于是我决定为我当时所畅想的桌面Blog而量身定做一套Ajax Framework,并以我所在的工作室Wedia(Web&Media)而命名,称之为WediaAjax,并极力避免Ajax的一些开发误区:模仿软件,Ajax并不擅长这些。
一个半月的没日没夜地开发后,WediaAjax渐渐开始展现出它特有的功能,每一个功能的改进都让我感到无比的兴奋,我所畅想的桌面Blog的功能开始在这里面进行一个又一个的测试,WediaAjax也向这这方面一步步发展,很快最开始的Alpha版本开发完成。由于缺乏资金,又没有支持者,再加上又是期末考试了,我的时间非常的紧张,于是并没有发布,我决定用它来经受一次实战:用它开发我的Blog系统。寒假的日子很漫长,整栋宿舍都没有几个人,在后期的开发中甚至都感到了一种极度空虚的窒息。过了五个礼拜,桌面Blog基本成形,并且在开发当中遇到的总总问题我都将其封装好,包括动态图片验证、符合W3C标准在线编辑器、Repeater控件分页、RSS控件、验证码……所有的这一切都以高效率为基准,避免多回传一个Byte,避免多渲染一个控件,WediaAjax渐渐的成熟了起来,灵活了起来。但是由于当时的服务器太差,在本机上的效率很棒,但是上传到服务器上后,居然会出现卡死的情况,我很失望,并开始查找原因,控件成了我攻击的对象,所有的这些控件不过是渲染成HTML而已,这个过程非常耗内存,于是我决定挑战一下极限:丢弃控件!我很快发现了一种高效编码的方式,所有原来的体系不变,将所有的User Component全部转变成一个类,并继承自Object,丢弃所有的ViewState、Cookie、Cache,自身仅包含一个Render()和一个AjaxRender()两个方法,前者是一般控件的渲染方式,后者是AjaxCall的时候的渲染方式。很快这样一个想法在我没日没夜地几天工作下完成了,在本机上测试,速度提升了一个档次,对资源的损耗也降低到了最低,达到了我所畅想的
“极限编程”,并将其开发模式称之为:无组件开始模式。一看日子,腊月28了,后天就要过年了,是回家的时候了。
在家终于是在15的时候赶来了学校。新的一年总该有不少变化,我也精神饱满的开始计划的新的一年。WediaAjax继续开始了新一轮的测试:开发桌面论坛。开发工作还没有开始,一次偶然的机会,我发现了在document.write(),document.close()之后浏览器居然有前进和后退的,我很敏感的想到,可以利用浏览器保存临时网页的方式将状态保存在一个Iframe里面,这样就可使其支持浏览器的前进和后退功能,并且整个前进和后退是没有回传到服务器的,这个想法很令我兴奋,同时我发现了WediaAjax一个特殊的地方,状态的保留一个函数的调用,也就是说WediaAjax天生的能很好的支持前进和后退功能,然而要做的很完美也有不少问题,这个开发也居然持续了快一个星期,最终在FF里面的调试没能过关,但是支持以IE和以IE为核心的浏览器的前进和后退功能了。然后我又开始了桌面论坛的开发,经过这段日子的磨练后,发现我的开发技巧、开发模式渐渐趋向于成熟,开发速度很快,代码编写的也很有艺术感,在桌面BBS的开发中,我渐渐完善了WediaAjax,使其灵活性大大提高,并可以在不同的User Component间传递渲染ID。另外我找到了间于纯组建版和纯无组件版的一种中间开发模式,前者开发简明,意图明显,完全可视化开发,但效率要打折扣,尤其是开发大起来之后;后者开发效率高,运行快,开发再大也不会影响性能,但是对开发者要求高,是不可视的开发,维护性稍差。于是我开始寻求一种间于两者之间的方式,很快我也找到了该方法,使用PlaceHolder动态加载控件,这个方法相当有效,并且拥有前面两种开发方式的优点,于是我将其应用到了桌面BBS的开发中。
好了,我觉得啰嗦了一大堆的废话,但我是想让大家多了解一下WediaAjax,并熟悉我开发的过程,可能对于大家改变传统的开发理念有不少帮助。下面我具体介绍一下WediaAjax的一些优点,让大家更了解一些一下WediaAjax,并加入到开发当中。
- 开发者不需要懂Ajax。WediaAjax是基于服务器端的开发,以前的ASP.NET2.0的开发者并不需要了解Ajax的运行方式,也不需要了解ASP.NET2.0的控件运行方式,也不需要改变以前的开发体系,要做的事情只有两点:将您的Page继承自Wedia.Ajax.UI.WediaPage,将需要回传的和更新的控件拖放入到WediaUpdatePanle中。这样就可以实现您所想的无刷新了。
- 高效简洁。这是WediaAjax的一个很大的特点,为了做到这一点,客户器端的Ajax代码只有13K左右,服务器端扩展了所有的常用组件,并对Repeater控件做足了优化。对于您以前的开发,我强烈建议将您以前所有的控件,比如: <asp:Label /><asp:Button /><asp:Repeater>……替换成<wedia:WediaLabel /><wedia:WediaButton /><wedia:WediaRepeater />……这样将有利于您的服务器高效而快速的运行,并且您可以控制其回传的内容。为此我还专门优化了一些控件,使其生成的HTML代码更少,更符合W3C标准。
- 功能强大。WediaAjax能够兼容IE和FF,同时支持IE和以IE为核心的浏览器的前进和后退功能。另外WediaAjax有一套测试系统,您可以在此察看来去回传的数据和所用时间。
- 极高的灵活性。WediaAjax具有极高的灵活性,这意味着您可以不受拘束的使用WediaUpdatePanel,并且使之相互关联,以达到最大程度的减少回传和服务器的资源的损耗,并且您还可以通过WediaLinkButton和WediaButton的WediaUpdatePanelClientID来制定需要渲染的WediaUpdatePanel,这样可以在不同的自定义用户控件间控制回传,减少使用WediaAjaxPanel。另外您还可以根据一个WediaPage的PostBackEventArguments来维护状态,减少服务器端资源的损耗。
- 与宿主(VS2005)完全的兼容。您或许已经发现无论是MagicAjax,还是现在的ASP.NET Ajax在宿主中的显示都有问题。WediaAjax很成功的解决了这些问题,使其能够很好的显示在宿主里面,而不会出现任何错误。
- 大量的插件。为了验证WediaAjax的可扩展性,我特意制作了许多插件来配合WediaAjax的使用,包括在线编辑器、动态图片验证等等,这些插件能很好的和WediaAjax一起工作,并提供许多额外的功能,欢迎大家为WediaAjax开发更多的插件。
- 封装了许多实际开发中遇到的问题。由于WediaAjax是的根本目的是为了达到高效,因而我并没有对GridView、DataSet这种非常消耗资源的控件做任何封装和扩展,但是对Repeater控件却做了许多的封装,并使其具有分页的功能。另外如验证码,开发者可以自定义验证吗的大小、颜色、显示文字等等。
- 为桌面开发而提出了三套新的设计方案。纯组件、无组件和动态加载组件三套方式,这三套方式我都有相应的Blog系统,可以分别用来解决很多开发问题。前者适合小型开发,对开发者要求低;无组件适合中型开发,对开发者要求高,能使效率达到极限运行状态;动态加载组建适合大型和对维护性要求较高的开发,效率较无组件稍低,可视化较纯组建稍低,却兼具两者的优点。
好了,优点就说这么多了。言归正传,还是不要忘了发这贴的目的。由于本人目前缺乏相关资金和支持,目前打算将WediaAjax作为开源项目将其发布,但是由于我目前的时间相当有限,希望有人能帮忙一起工作,写些Demo,然后再将其发布。同时想通过这来结交一些志同道合之人,共同研究开发,欢迎加入我们的开发团队。另外我打算建一个开源平台,为国内的开源事业做点贡献,欢迎有相同想法的人来一起交流。
PS:如果打算帮忙写Demo,请您给我发封Email。您可以从我这里获取WediaAjax的源码和纯组件版的Blog系统,以帮助您理解WediaAjax的开发。另外,在WediaAjax发布后,会在Demo开发者上写出您的资料,您也可以申请加入我们的开发团队。但是要求是:1.请不要将我发给您的源码公布在网上。2.请您务必帮忙写些Demo。3.请您在我的Blog的留言本上发一篇留言,说明您想获得该源码,并承诺您愿意帮忙写Demo。
clingingboy
...
1 year 6 months ago
这个博客搞的非常不错,是值得一个用来研究技术的站点,
Dflying
...
1 year 6 months ago
赞一个,速度飞快阿:)
挺佩服你的!
jazzking
...
1 year 6 months ago
我有ff确实有点问题 不过对你的东西真有些兴趣 想研究研究可是我技术有限 不知是否介意传份源码给我学习学习呢?jazzkng746@yahoo.com.cn
怪怪
...
1 year 6 months ago
你的东西很棒,但你的风格我有点接受不了...。你的博客仔细看了一些文章,说几点:
1、比如对Repeater的评论完全正确,其实我认识的初学者现在都知道这种问题,可你却认为大多数人不认识这个控件。
2、你的很多思路其实很正点,但文章中老让人感觉你在老王卖瓜,说白了除了菜鸟谁也受不了这个。比如说你的无组件的方式,对菜鸟宣讲听着很牛甚至代替了ASP.NET的传统开发模式,但实际上对于任何一个有经验的开发者,说实在的在C#中实现一个这个比用ASP还容易,这种语调容易造成交流障碍。
3、你说Atlas多大,你的多小,其实你的也是有压缩后十几K,实际上AJAX EXT正式版真正需要发送到核心的JS压缩后比你大不了多少,其完备性却是你所不具备的,并且这种完备性对于一个比较完整的AJAX应用,绝对是必要的而不是你所说的浪费。你说老赵在误导,可在我看来谁在误导不好说。
4、我上面说的,不是为了表达我对你的不爽,这没有意义,只是我个人感觉人和技术要并作,该圆滑的地方圆滑是为了让大家都舒服,这是对别人的尊重;另外你的东西现在还是初期,不完整是正常的,我没有看不起的意思,但你把话说得太大了...
5、对于你所为之兴奋的这种轻量化实现方式,就直接与HTML打交道来说与ASP相差不远了.. 效率上肯定是最好的,但这不是只有你知道,否则别人都是傻子了(其实你的很多发言都有点把别人无知化),但不是现代化软件工程的发展方向,为什么JAVA、ASP.NET要选用一个大幅降低效率、提高复杂度的方式,我想是你需要考虑的。虽然我个人认为ASP.NET的实现有错误,但错了之后可以走上正确的道路,而非是倒退(在WEB方面就是又回到和字符串打交道,只有简单的封装,而放弃了大量应有的进步)。
我发比较直接的帖子,一般有一句话,就是我到底是好意歹意,得看的人自己衡量。有志气是好事,希望你一路走好。
萝卜
...
1 year 6 months ago
希望能够拜读大作,请将源码发至robchen@126.com
冰风
...
1 year 6 months ago
我想试试你的这个Bug修复了没有~
零点绝缘
...
1 year 6 months ago
支持!
其实我也挺想加入和你们一起研究的,不过现在实在是有点忙,抽不出时间写demo哦,不过依然支持你~~