Web之根本和Ajax之根源
...
Bing
...
Diary
...
1
/1018
...
1 year 8 months ago
Web之根本和Ajax之根源 最近一直在关心ASP.NET2.0和Ajax技术,为此我深入到.NET2.0的方方面面,甚至从根本上去尝试了解它的原理之所在,而Ajax技术是我Blog开发的关键,没有它什么事情都 会变得简单不少,却也变得惨淡失色。为了完成我构思宏伟的WediaAjax库的开发,我开始分析组件的工作原理,开始写组件,我写了很多组件,最终我得到一个可怕的结论:整个Blog不过是一个组件!
这个结论使我感到诧异。 当一个不曾期望的结论摆在我面前的时候,我不是害怕,而是感到无比的惊喜,这迫使我不得不重新审视整个ASP.NET2.0,为什么会出现组件?为什么所有的组件最终都是 生成HTML代码?而这些HTML代码都不过是我们老生常谈的a、input、textarea、div、span、table……标签。答案是:HTML标签太少。HTML并不能解决动态数据问题,并不 能实现数据邦定,但是HTML能完成所有的显示和布局。于是诞生了ASP、PHP、JSP、ASP.NET,Ruby。其工作原理无非如下:客户端请求->响应请求->解析Get或Post数据->动 态生成代码->返回给客户端。他们只不过是将HTML代码以字符串的形式来对待,然后不停地更改这个字符串,最终将他回发给客户,仅此而已,所以决定这些技术的效率的 关键就是语言本身执行的速度的快慢和链接数据库快慢(后者更为重要)。但是为什么技术还是屡出不穷?为什么更多的组件出现在我们面前?答案是:常人无法解析所有的字符串。
为此“高智商”的人开始开发各种各样的组件使得“低智商”人具有同样的能力开发Web。这样只导致一种结果:开发人员对底层的东西了解的越来越少。因为所有这些底层 的东西都被封装好了,而这些 “高智商”的人又个个都特别爱封装。
但是我们还是从理性上来好好论述一下ASP.NET。如果开始学的是PHP,然后再进入.NET的学习,会发出惊叹,更多的是无所适从。因为ASP.NET居然是使用组件开发的,而所 有的组件居然有回传机制!这个结论让他们许久不能理解,因为他们习惯了HTML标签,而对任何<asp:{0}></asp:{0}>标签感到难为情。说到回传,这该是ASP.NET最大的优 势,为什么这么说呢?整个TCP/IP协议是无状态传输!了解到这个很重要,ASP.NET很显然是用了一套机制来维持这个状态,它又是怎么实现的呢?Ajax。不要惊讶,微软的东西是用Ajax搞的?对的。但是这里的Ajax可以理解成单纯的Javascript,在回传的时候多了__eventTarget和__eventArgument,而每个_eventTarget的id在传递到客户端前是确保为唯一的。那么在服务器端必定有唯一的一个名称和它对应,在解析数据前,所有的数据邦定控件都必须DataBind一次,这样这个事件才能被捕捉,这也是为什么 初学者总是发现Repeater控件里面的一个LinkButton的Click事件没有反应的原因。同时ASP.NET 通过RaiseBubbleEvent来上调事件,因此感觉像是Repeater的 OnItemCommand事件被触发了。这是ASP.NET了不起的地方,因为这些封装的极为良好的控件极大的降低了入门的难度。
既然TCP/IP协议是无状态的,那么如何维持状态就成为了所有技术共同考虑的重点了。我曾经大量使用过ViewState、Cookie、Session、Cached各种不同种类的数据来维持 页面的状态,其结果只能用一个词概括:麻烦。但事实上,理论上能解决状态维持的方法,我就成功的做到了。但代价是什么?性能的损耗。但最后我发现了更好的解决方法:使用一个字母代替一个状态。于是应用程序对CPU和内存的损耗瞬间减低了,但是还是不够好。
上网的人都有这样的感觉:打开以一个aspx结尾的网页的时候速度都要卡半天。这个又是为什么?除了我上述的一些性能的损耗外,更为重要的是不必要的数据的回传,而动态的网站都需要连接数据库,而连接数据库却往往是效率的瓶颈之所在,于是慢了。同时为了和用户交互,那么就必须有一个Form元素,但Submit触动时,另一个问题 产生了:页面要刷新。然而Ajax能从理论上很好的解决了这两个问题,这便是我们喜欢Ajax的原因。其实Ajax产生的根本原因不是要实现无刷新,而是因为有不必要的数据需要更新,无刷新只是没有“预料”到的一个宝贝儿。
但是人们却一味的理解错了Ajax之根本,说到Ajax,人们首先的第一反应是无刷新,其次是像GoogleMaps这样宏伟的作品,再然后就是各种各样的拖拉特效。人们甚至将MVC的设计模式照搬到Ajax上,甚至后来微软居然活生生的把javascript C#化了,真是愚不可及!Ajax应该做的事情其实很简单:收集应该Post的数据,然后PostBack.That's OK!这样就能解决众多我们实际开发过程中遇到的所有问题。而所谓的拖拉、摆放,并没错,但并不是我们追求的重点,数据、交互、维护、更新才是我们考虑的永恒的重点,在这些问题没有解决前,而考虑一些无聊的特效只能很快的使您的网页面临枯燥和乏味。当然我也期待有一天网页上的操作能和Apple或Vista的桌面操作一样漂亮。
我刚刚一个人在整个空空如也的宿舍走廊里走来走去,苦苦的思索着这些问题,这也是我刚刚所得出的结论。感觉上像是突然间看透了这样一种方式,于是一种全新的开发理念开始在我脑海中酝酿,依旧是使用ASP.NET,但是我将剔出掉所有的控件;整个Blog不过是一个HTML代码。下次这个Blog更新的时候您将会发现一个无与伦比的快速的Blog!但是我想这个仅仅只能在您能理解上面的话语并且具备实际的Ajax开发经验后才能做的到的吧,对这有兴趣的人可以和我交流。右边Public News里面有我的Email。
安利
...
6 months 7 days ago