Atlas六大罪状
...
Bing
...
Ajax
...
1
/1417
...
2 years ago
(本篇文章是要写分析一下Atlas,然后再好好反思一下Atlas,是不是该全盘接受,而无所顾忌,或者应该有所取舍,而得出自己的理解和认识呢。不过为了增加以下点击率,也得好好利用一下这个题目了,相信很多人应该感兴趣的。)
现在Atlas真可谓是如火如荼,人们似乎都疯了似的研究着Atlas。看看
http://atlas.cnblogs.com/,你就知道现在有多么多的高手、牛人、资
深专家在研究着Atlas的处理机制。其中
Dflying Chen是做得一个相当不错的,我个人很看过他的一些文章,写的很好,也很有特色。只是我在想
在使用这样的新技术的时候,是不是该好好思考一下这样的技术是不是人云亦云,盲目追逐。
首先我该说说为什么那么多的人要使用Atlas,它到底有什么好?
- Micrsoft出的,还是Microsoft很难得的一项开源技术,就凭这个也让人们一改对Microsoft的印象,多出一批追求者。既然是Microsoft出的,那么前途问题自然是不用担心,从Ajax开始活跃到现在有成千上万的Ajax Framework,至今存活下来的也是寥寥无几,Atlas是出来的比较晚的一个,但是却是博采众长,可以说是应有尽有。那么有那么多的人使用,自然也不足为奇。
- Atlas是对ASP.NET2.0的一个极好的补充,国内的开发者可能还有很多人停留在ASP的繁琐复杂的开发上(从深层次角度讲,它有着独特的生命魅力,在此不展开探讨了),但是新一代的开发者都将目光转向ASP.NET2.0和SQLServer2005上了,再加上VS2005这样优秀的软件作为开发平台,着实是让人眼前一亮。ASP.NET2.0也着实是我目前所用过的开发效率最高、开发产品最具扩展性的平台。然而ASP.NET有着最大的诟病:PostBack(虽然这个也是它最大的优点——降低了入门的门槛),而每一个PostBack会将页面上的ViewState带给服务器,然后再从服务器返回新的数据(当然如果您相当ViewState,您可以减低网络传递的数据量,提高网络访问的速度),这样可以看得到页面有一个很明显的暂停,这并不是好的用户体验。而Atlas的出现,瞬间减少了很多这样的问题,使得开发者不得不转向对它的研究,自然就会有不少追从者。
- Atlas着实是太好用了!Atlas是笔者用过的最爽的AjaxFramework,同时针对ASP.NET2.0给出了一些列Components,这样可以在服务器端开发,只需要拖动几个组建就可以完成大段大段的javascript代码,效果又相当的好,笔者对Atlas产生兴趣也就是对它的这些简单易用的组件开始的。将什么GridView、Repeater、Datalist这么好的组件只需要拖到UpdatePanel里面,然后再添加个ScriptManager,将EnablePartialRendering设置成“True”就可以实现无刷新了!Everything sames so cool!太简单了,大大减低了入门的难度。同时可以看看使用Atlas调用WebService是如何的简单:首先在ScriptManager的<service>里面加入<atlas:ServiceReference Path="CachedWebService.asmx" />,然后在Javascript里面加入CachedWebService.GetGurrentTime(onCompleted),就可以调用了。My God,How can it be so easy to do things like this!调用DOM里面的元素只用使用$符号就可以了。可以想象,任何学习Ajax的人有理由不选择Atlas吗?
- Atlas引入了一些新概念,这些概念将在后文中做详细的探讨,现在让我们看看这些新概念。首先引入Namespace,然后有Interface,还有类的继承。天啊这不就是C#吗?按照Microsoft的想法,这个可以将Javascript完全面向对象化了,这些概念的确很吸引人,这让我这样一个C#的忠实爱护者也想探个究竟,这些东西是怎么实现的啊?的确很吸引人,而这些是在以往的任何一个框架中没有实现的!
- Atlas扩展了许多对象。像Function、Date、String、Event等等,如果您看过源代码的话,您可能已经看到了它是如何扩展这些对象的。可以发现它是如何将这些对象如何演变成C#里面的这些对象的。String也居然有了Format这样好使的方法,也还多出了Sys.StringBuilder这样的对象,真的是好亲切啊,用这样的一些函数真的是省了不少事啊。但是太可惜了Atlas居然没有扩张document.cookie这个对象,Javascript里面的Cookie可不像C#里面的Cookie好用啊!
这些东西都足以让我们深入下去研究Atlas,但是越深入问题也就越多,如果您还停留在自己的机器上左Experiment的话,您可以继续做您的
Atlas春秋大梦,如果您将它实际应用到开发的大型系统上,问题就浮现了,并且是相当大的问题,这个问题就是效率。我想
任何网站或者平台
,好的用户体验固然重要,但是这样一些用户体验是建立在高开销网络的基础上,这样是得不偿失的。如果是韩国或者如本,情况可能不像我想的这么严重,也可能根本没有影响。但是这是在中国,网络问题一直是我们最大的问题,如果打开一个网页要下载好几百K的文件,这样可以想象一下这个网站打开的速度是多么的慢,就像这个Blog一样,相信您在看这篇文章的时候是耐心的等待了多么久的时间(本Blog将很快改版,提高浏览速度)。那么下面将进入最精彩的话题,Atlas的六大罪状,呵呵,是不是有点多了,请您继续看下去。
- Atlas太庞大了!笔者现在在从头至尾的研究它的整个框架的源代码,并尝试吸取其长处,创建自己的一个AjaxFramework。在研究的过程中发现Atlas的代码量之大也实属罕见(请注意,这是针对Ajax Framework,在别的开发里面10000多行代码可能着实太少了!),一般人在使用的时候基本上不可能避免使用UpdatePanel,那么最基本的Atlas.js文件将被加载到您的页面当中,要知道这个文件有10000多行代码,200多K,对于一个网页的加载,这个的结果将是惨不忍睹的。如果您还想有什么Drag之类的效果的话,那么又得增加37K的js文件,当然如果您再加入什么验证的组件,javascript代码又会增加几十K……您希望这样的事发生吗?如果还有什么在线编辑器之类的话,估计没什么大的指望可以让任何一个上网的人等待下去了。
- Atlas余茸太多了!像String、Date、Event这样的对象,有必要需那么多的方法吗?很多时候我们加载的js文件里面有80%的代码是基本上没有什么用的,因为我们根本就没有用到。我们有必要这样做吗?在服务器端我们可以不管,同时Dll文件也是动态调用的,但是这是在客户端,你的那些对象的方法和属性不是动态调用的,不是说你要用它它就被加载了,不用它就不加载了(如果Atlas真的能做到这一点,我将毫无顾忌的选择Atlas来完成我所有的工作),而是所有的全部加载,给人的似乎感觉太霸道了。同样的问题,这样的余茸将使我们Js文件变得大的可怕,又回到我们的效率问题上了,这也是Atlas庞大的根本所在。
- Atlas违背了javascript这门语言的初衷。Javascript被创使用来增加一些用户体验的,比如表单验证什么的。但是Ajax的出现却改变了这样一种现象,Javascript被用来做更加强大的处理,并且效果相当好,也极大地提高了所谓的用户体验。然而这样做并不是要你在一个网页中编写大量的javascript代码,也不是让你使用javascript来做所有的工作,不知道您有没有这样的感觉,似乎所有的系统只使用Ajax就能完成所有的工作,根本就没必要使用ASP.NET这样的奢侈品。但是真的是这样吗?实际上这只是一种假象,而正因为这样的假象,人们只认同Ajax,而否定了一切。我个人认为Ajax只是作为一种提高用户体验的工具,而并不是开发系统这样需要高扩展性和维护性的万能工具。它是用来减低服务器负担、减少网络流通量、提高用户体验的一个相当不错的工具。而如今被过分的夸大其词而变的不可一世。
- Atlas违背了javascript这门语言的根本。喜欢ActionScript3.0或者C#的朋友可能异常讨厌javascript这门技术语言,讨厌它为什么如此丑陋,为什么连个类型都没有,为什么没有空间名、为什么没有类的继承,讨厌它为什么语法如此瑰异,让人摸不着头脑。当然很可能您相当喜欢javascript,不过我的入门语言已经是OOP的ActionScript2.0,然后又是特别牛的C#的语言,没有特别沉下心来研究JavaScript,但是刚开始接触这个东西的时候就有我刚刚发的牢骚,但是等我真正开始了解这门语言的时候,才知道它的机制是相当牛的,不是低级的语言,而是一门相当高级的语言,它没有类,没有命名空间,所有的扩展都是通过Prototype来扩展的,所有的对象不过是一个变量而已。而这所有的一切也正是它的特点所在,这样能极大地较少网络开销,具有者极大地灵活性,同时也能作为一门很好的入门级语言来学习。然而Atlas这样一来却对avascript进行了无情的摧残,它将javascript C#化,不仅不是明智之举,更是让人悲伤不已。
- Atlas不支持前进后退。javascript一直蒙受着不能跨浏览器使用、不支持前进后退这两大诟病的羞辱而不能为人所用。虽然Atlas基本上能解决跨浏览器的使用,但是却不能解决前进后退的功能,对于习惯使用前进后退按钮的用户,这无疑会产生一些逻辑上的错误,减低用户体验,导致一些让开发者没有预料到的错误。
- Atlas还有太多的Bugs。Atlas现在已经知道的Bug已经有相当多了,但是在实际开发中还有着相当多的隐藏的Bug,笔者在开发中就遇到过许多让我不只是怎么一回事的Bug,而不得不考虑使用别的方式开发,当然小型的项目对于这样的Bug可能少的多,但是小的项目又何必需要如此大型的Atlas呢?
好了,也总算是东拉西扯的找到了这样一些罪状,但是这是可以说是我个人在实际开发中所遇到的一些问题总结,同时也是我在深入开发中对
Atlas的个人理解,当然不可避免的由于自己的道行不够而提出了一些错误的观点,如有错误还望指正,如果不同意您也可以提出您的观点,我
们一样欢迎。
既然问题是提出来了,那么总要有个好的解决方式,如何解决呢?那么这个可能就需要比较高的道行了,不仅要熟悉C#、Javascript、
UpdatePanel的处理机制以及Javascript的回调、还有WebService。但是已经有个很好的例子了,那就是MagicAjax,为什么我要将它提出?这是
因为MagicAjax它专注于一个方面,就解决这一个问题,并且它
使用起来相当简便,对网络的流通量也没有太大的影响,这样的Framework是值得欢迎的。那么如果是我,我该怎么办呢?我编写自己喜欢的Framework,然后自己适用,即使我们没有太多的经验,
但是我们可以站在巨人的肩膀上,你可以下载任何开源的Framework,然后自己研究,相信可以在很短时间里学会并适用,并理解那些优秀开发者的开发理念,获得经验,这些都可以使一个具有天赋的人在极短时间里成为一个天才。相信你自己是个有天赋的人,那么说不定一个更牛的Framework就在你的手中诞生了呢!
jazzking
...
1 year 6 months ago
thank you~
谢谢 您的文章 拜读后 明白了很多