去年年底,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将关键字提交到如下的地址:
最后的 qu=java 就是我键入的搜索关键字 java。那么google返回的是什么呢?请看:
出乎我的意料,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 没有返回 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会更完美。我会用连载的形式比较详细的介绍它。本文算是一个引言吧。
心情: 一般