国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > AJAX > 正文

淺談我眼中的Ajax

2024-09-01 08:26:21
字體:
來源:轉載
供稿:網友
AJAX在去年確實火爆了,作為Web2.0時代的核心技術,關注度盛況空前,至今仍余音未絕,我一直從事于WinForm、Windows Mobile應用開發,雖然對Web開發略知一二,但從未向學習WinForm開發一樣系統的學過Web,最近閑暇之余從頭學了學ASP.NET,到現在才真正理解清楚了諸如ViewState之類的Web工作原理,我可以肯定的說,時下的Web開發人員中還有什么都沒理解清楚的“高手”,當然ASP.NET并不是今天討論的話題,我們直接看看Ajax吧,在理解清楚它之后你會發現,它比理解WinForm編程中的線程單元要簡單得多,就其技術本身來說并沒有什么神秘與復雜性可言,而且其工作機制還不及三次握手的理解難度,我們并不討論實現的方法,而只對底層工作原理進行剖析,因此讀這篇文章并不需要造火箭的技術。

Ajax(Asynchronous JavaScript and XML)中文意思為異步JavaScript 和XML,或者基于XML的異步JavaScript.它提供了一種局部刷新Web頁面的機制,比起傳統的整頁Load在性能上有了質的飛躍,看看GoogleMap吧,再看看Google輸入框的AutoComplete功能,相信你已經對Ajax無限神往了。每一項技術都有其發展的根源,我們追溯一下Ajax的歷史,其實這個技術最早在IE5.0中被引入,算算也是幾年前的東西了,可惜微軟當時并沒有挖掘出它的價值,直到Flickr, Backpack和Google在這方面作出了驚人的研究成果。就技術根本來說,Ajax只完成了一個功能,即用客戶端代碼(JavaScript )發送Http請求,要完成這一特殊的功能并不是我們這些普通開發人員能簡單實現的,因為它依賴于瀏覽器本身,在IE5中,微軟引入了一個XmlHttp的ActiveX對象,后來Mozilla, Safari 和其他瀏覽器紛紛仿效, 提供了XMLHttpRequest類,它支持微軟這個ActiveX對象所提供的方法和屬性.這個類使得我們用JavaScript發送Http請求成為可能。并且它提供了我們插入響應代碼的途徑。下面是前面所描述的這個對象執行機制的偽代碼:

request = new XMLHttpRequest();

request.open('GET', 'http://localHost/xxxx.aspx, true);

request.send(null);

響應這個請求:

request.onreadystatechange = function(){

var text = request.ResponseText; //取得響應的字符串

// 作出響應.....執行一些客戶端JavaScript

};

當然實際代碼比起這些代碼要復雜得多,但前面說過了,我們并不討論實現方式,而是探尋其執行原理,可見為Ajax剝下神秘面紗后赤裸裸的展示出來其簡單的原理,和C#里的事件響應一樣,只不過這個事件是客戶端請求而服務端觸發罷了,真正的復雜性早已被微軟封裝到ActiveX對象中了,但是原理的簡單并不是說實現的簡單,實現起來確實有些難度,但是現在那么多的AJAX框架已經為我們屏蔽了很底層的東東,實現并不在本文所談論的話題,這里就不詳述了。

任何新技術的引入伴隨的都是痛苦的學習,我們必須掌握其實現原理,才能準確,適宜的用好這些新技術,盲目爛用只能弄巧成拙。那么作為開發人員的我們如何應對已經到來的AJAX呢?以下是我個人理解了AJAX后的一些結論(注:本人自知技術造詣淺陋,不對之處請大家原諒):

理解Ajax解決的問題

Ajax的出現就是為了改善Web程序用戶體驗,用戶點擊頁面后的頁面刷新延遲問題就是引入Ajax的直接理由,如果我們的程序運用AJAX并沒有改善用戶體驗的話那只是為了Ajax而Ajax,而不是為了用戶體驗而Ajax。

Ajax的弊端

1、兼容性。Ajax的立命之本是前面提到的XMLHttpRequest,然而這個對象在各個瀏覽器中不盡相同,這就增加了我們開發過程中完成一個跨瀏覽器的通用代碼的難度,而JavaScript這種語言在各種瀏覽器中對技術的支持和標準也不同,從而加劇了這種困難性。好在市面上紛繁的Ajax框架已經為我們解決了兼容性問題,讓我們構建跨瀏覽器的程序變得簡單起來。
2、服務器壓力。本人認為Ajax把客戶端請求服務器響應這一過程變為異步執行,一方面提高了用戶體驗,同時使得用戶請求響應的次數顯著增加,服務器面臨的壓力也將增強,試想一下,以傳統整頁加載的方式當用戶請求一個頁面時候必然會等待頁面裝載,而Ajax使得請求發出后頁面并不需要等待,這樣用戶可以點擊其他頁面元素再次發送請求,試想一下Google的AutoComplete功能如果是鏈接數據庫請求的話,每次輸入都會發生這一行為,那數據庫壓力是否成倍增長?
3、語言問題。由于Ajax以JavaScript為核心,而這是一種繁雜而又易出錯的語言,它會使得我們將應用邏輯任意地散布在服務端和客戶端中,這使得問題很難被發現而且代碼很難重用。JavaScript甚至被服務端開發人員認為是一種企業級應用不需要使用的東西應該盡力避免。幸好出現了Microsoft Script Debugger等強大的JS調試器,同時VS2008的JavaScript智能功能也在為這些問題而做著努力。然而JavaScript的缺陷如雙重變量賦值(通常是由于缺少數據類型)使得調試程序依然面臨挑戰。

相關技術

由于XMLHttpRequest返回的響應是以字符串形式出現,因此XML成為理想的選擇,Ajax中的x預示著XML將終身伴隨著Ajax,因為大多數開發人員已經掌握了這項流行的技術。對于Xml來說理解Dom是必須的,Xpath為Xml操作提供了捷徑,而XSLT為輸出Html提供了天然的溫床,因此所談到的這些技術作為Ajax開發者必須掌握。加上新引入的XMLHttpRequest對象,和更復雜的JavaScript代碼,相信技術的學習依然會痛苦一段時間。
 

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 邵阳县| 绍兴市| 台东市| 麟游县| 志丹县| 福建省| 布拖县| 永城市| 临泽县| 丰原市| 那曲县| 丰原市| 嵩明县| 吴旗县| 临澧县| 齐河县| 兴和县| 乡宁县| 云龙县| 独山县| 额尔古纳市| 南岸区| 沈阳市| 施甸县| 苍溪县| 长兴县| 清远市| 永宁县| 诸暨市| 栾川县| 安陆市| 依安县| 周宁县| 保康县| 子长县| 格尔木市| 海阳市| 临汾市| 浙江省| 霍林郭勒市| 布尔津县|