http://www.javayou.com (收藏,设为首页)
当你不能再拥有时,你唯一能做的,就是让自己不要忘记 (手机请访问 http://3g.dlog.cn/javayou)

Google Suggest 剖析

2005年2月28日(Monday) 17点30分 作者: 泽欣 天气: 心情: 一般

去年年底,Google推出了一项新的服务Google Suggest,可以提供和你搜索关键字相关的关键字建议。目前还只有英文的beta版本,网址在这里:http://www.google.com/webhp?complete=1&hl=en

比如我在搜索框中输入java,效果图如下:

提示效果的实现原理,我们大概可以猜到,很有可能是利用js通过xmlhttp获得google后台整理出来的索引数据,并动态生成一个layer或者iframe显示出来。

这个效果具体是怎样的一个流程呢?对google 的技术的崇拜促使我决心去弄清楚。通过查看该页源码,我发现其加载了一个脚本 ac.js,下下来一看,一头雾水,因为几乎所有的脚本都被混淆了,满眼看到的是与乱码无异的abcd。经过耐心的(我都被自己感动)抽丝剥茧,基本清楚了套路。

与我最初的猜测一致,确实是通过xmlhttp,js将关键字提交到如下的地址:

http://www.google.com/complete/search?hl=en&js=true&qu=java

最后的 qu=java 就是我键入的搜索关键字 java。那么google返回的是什么呢?请看:

sendRPCDone(frameElement, "java", new Array("java", "javascript", "java download", "java games", "java virtual machine", "java script", "java api", "java in a nutshell", "java tutorial", "javanoid"), new Array("132,000,000 results", "42,000,000 results", "14,500,000 results", "7,210,000 results", "2,890,000 results", "4,730,000 results", "3,960,000 results", "452,000 results", "5,320,000 results", "23,400 results"), new Array("")); 

出乎我的意料,google 没有返回 xml 数据,而是直接返回了一段 javascript,这段javascript是执行一个名为 sendRPCDone 的方法,这个方法其实早已定义在ac.js中。其后的参数我想大家都明了了。调用这个方法的结果我们用脚底也可以想到,一定是将数据写入动态产生的iframe中,然后popup。

让我感兴趣的是,通常js+xmlhttp的应用都是传递xml格式的数据,google直接返回javascript的方式,我想它的用意是为了省却了解析xml的消耗并提高兼容性,毕竟解析DOM是比较消耗内存的,而且在各种浏览器中处理DOM的语法还没有完全统一。

我不禁想到,xmlhttp 这个名字以xml开头也许限制了我们的想像,使我们习惯或者盲目的硬要带上xml来解决问题。不光如此,很多时候,我觉得xml被滥用了,一些项目或者产品,很简单的属性都要用xml来配置。很多时候我更愿意看到一个 properties 文件。

向大家推荐一个东东,JSON-RPC-Java : javascript 与 java 进行 rpc 调用。底层通讯当然仍旧是xmlhttp。我以为用它,Google Suggest会更完美。我会用连载的形式比较详细的介绍它。本文算是一个引言吧。

标签: google 
评论者: caoliwei 2005-3-1 08:51 (Tuesday)
这是一个好咚咚
姓名: 
邮箱:  {可选}
网址:  {可选} 此评论只有我和写日记的人查阅
校验码: ... <我看不清楚>
网记为您提供手机和互联网同步的个人主页,带给你不一样的体验