去年年底,Google推出了一項新的服務Google Suggest,可以提供和你搜索關(guān)鍵字相關(guān)的關(guān)鍵字建議。目前還只有英文的beta版本,網(wǎng)址在這里:http://www.google.com/webhp?complete=1&hl=en。 比如我在搜索框中輸入java,效果圖如下: 提示效果的實現(xiàn)原理,我們大概可以猜到,很有可能是利用js通過xmlhttp獲得google后臺整理出來的索引數(shù)據(jù),并動態(tài)生成一個layer或者iframe顯示出來。 這個效果具體是怎樣的一個流程呢?對google 的技術(shù)的崇拜促使我決心去弄清楚。通過查看該頁源碼,我發(fā)現(xiàn)其加載了一個腳本 ac.js,下下來一看,一頭霧水,因為幾乎所有的腳本都被混淆了,滿眼看到的是與亂碼無異的abcd。經(jīng)過耐心的(我都被自己感動)抽絲剝繭,基本清楚了套路。 與我最初的猜測一致,確實是通過xmlhttp,js將關(guān)鍵字提交到如下的地址: http://www.google.com/complete/search?hl=en&js=true&qu=java 最后的 qu=java 就是我鍵入的搜索關(guān)鍵字 java。那么google返回的是什么呢?請看:
出乎我的意料,google 沒有返回 xml 數(shù)據(jù),而是直接返回了一段 javascript,這段javascript是執(zhí)行一個名為 sendRPCDone 的方法,這個方法其實早已定義在ac.js中。其后的參數(shù)我想大家都明了了。調(diào)用這個方法的結(jié)果我們用腳底也可以想到,一定是將數(shù)據(jù)寫入動態(tài)產(chǎn)生的iframe中,然后popup。 讓我感興趣的是,通常js+xmlhttp的應用都是傳遞xml格式的數(shù)據(jù),google直接返回javascript的方式,我想它的用意是為了省卻了解析xml的消耗并提高兼容性,畢竟解析DOM是比較消耗內(nèi)存的,而且在各種瀏覽器中處理DOM的語法還沒有完全統(tǒng)一。 我不禁想到,xmlhttp 這個名字以xml開頭也許限制了我們的想像,使我們習慣或者盲目的硬要帶上xml來解決問題。不光如此,很多時候,我覺得xml被濫用了,一些項目或者產(chǎn)品,很簡單的屬性都要用xml來配置。很多時候我更愿意看到一個 properties 文件。 向大家推薦一個東東,JSON-RPC-Java : javascript 與 java 進行 rpc 調(diào)用。底層通訊當然仍舊是xmlhttp。我以為用它,Google Suggest會更完美。我會用連載的形式比較詳細的介紹它。本文算是一個引言吧。 |
|