最近在研究JavaScript和ajax,突然看到一篇文章,覺得很有啟發,雖然是很久以前的文章,還是覺得值得一看。
文章轉載自Andrew wang,地址http://blog.csdn.net/andydevelope/archive/2006/07/18/934928.aspx
Google,囊括了美國頂尖的Web開發高手,開發的Gmail、Google Reader、Google Maps也是Web2.0應用的經典。它們都是AJAX技術的傑出應用,然而有趣的是,他們使用的技術卻各有不同。這也許是因為不同的開發小組的風格不同,但一些細節卻透露出這也許是Google高手們針對不同應用的不同需求採用了不同的實現方法,以達到最完美的效果。真正的高手的高就在於此吧。
下面來分別看看這幾個應用。
1、Gmail:
Gmail使用自己獨特的協議在HTTP層進行瀏覽器和Web伺服器之間的通訊。
首先,瀏覽器端通過Javascript XmlHttpRequest向 伺服器發送請求,比如請求Inbox資訊的URL為: /gmail?search=inbox&view=tl&start=0&init=1&zx=,而請求所有未讀資訊 的URL為:/gmail?search=query&q=is%3Aunread&view=tl&start=0& init=1&zx=。然後,伺服器返回稱為DataPack的資料區塊。
Google做的第一個有意思的事情是,這個DataPack並不是基於XML的,而是一個基於Javascript數組格式的HTML檔案。它可 以包括多個DataItem,而一個DataItem是由一個封裝函數包括的Javascript數組,例如這樣的格式:D([”ts”, 0,50,106,0,”Inbox”,”fd36721220″,154]); 這裡的D()是一個即時解析函數,而”ts”是DataItem的類型。
這樣做的好處是:用戶端Javascript程式可以避免對XML的解析而直接使用這些資料,從而能提高處理速度並節省系統資源。
此外,Gmail用戶端每隔2分鐘會自動向伺服器發送重新整理請求,在這裡Gmail又做了一個最佳化。那就是在重新整理請求裡有一個時標(又有點象 CheckSum)。然後Gmail伺服器如果發現當前資料不比這個時標代表的資料新,它就會僅僅返回一個空的DataPack,以節省網路和系統資源。
2、Google Suggest
Google Suggest同樣使用Javascript定時向伺服器發送XmlHTTP請求,而伺服器返回的是一個Javascript回呼函數。回呼函數的格式 如:sendRPCDone(frameElement, “fast bug”, new Array(”fast bug track”, “fast bugs”, “fast bug”, “fast bugtrack”), new Array(”793,000 results”, “2,040,000 results”, “6,000,000 results”, “7,910 results”), new Array(”")); 其中,sendRPCDone是一個本地定義的Javascript函數。
收到伺服器返回的回呼函數後,本地網頁利用Javascript eval()函數直接執行返回的函數,將結果顯示出來。簡單、直接。
值得一提的是,研究Goolge Suggest的Chris將Google精簡卻難以理解的Javscript程式重寫了,值得想要學習Javascript的同志們一看。Google將他的Javascript程式精簡是可以理解的,因為可以壓縮代碼大小,從而提高網頁下載速度。
3、Google Maps
和前面兩者不同,Google Maps本地端不使用XmlHTTP,而是使用IFrame。而伺服器端返回的是一個HTML檔案。這個檔案在本地網頁中隱藏的一個IFrame裡開啟。 當它被開啟時,它通過調用window.parent._load()函數,將自己包括的、由伺服器返回的XML資料區塊傳給本地網頁,從而完成瀏覽器到服 務器的資料互動。
用IFrame的好處是,IFrame會將自己的狀態記入瀏覽器的曆史狀態中,這樣,使用者可以通過按瀏覽器的”返回”按鈕,回到以前的地圖。而XmlHttp因為不計入瀏覽器的曆史中,所以如果用XmlHttp的話,就只能回到進Google Map以前的那個網頁了。
而Google Maps的另一個特點是,本地網頁收到資料區塊後,依舊利用瀏覽器內建的XmlHttpRequest進行解析,然後利用XSL進行顯示,非常的格式化。
看到以上三篇文章,已經是他們寫出n年以後了。在這n年裡,又有什麼激動人心的變化呢?請大家指正。