论坛首页 Java企业应用论坛

淘宝网的搜索关键字的编码与解码

浏览 77070 次
该帖已经被评为良好帖
作者 正文
   发表时间:2008-12-04  
我来给大家剖析一下吧,淘宝的原来一帮人是从阿里出来的。而阿里最强悍的就是SEO。

这样大家是否有点清楚了。

SEO对URL还是非常的看重的,而url中如果包含太多中文等字符的话,对SEO还是不友好。

那么搞一个英文加字符的编码对机器来说还是比较容易好搞的。

至于非要自己搞一个,那其实这也不是什么特别难的东东,增加一些神秘感不是更好。
0 请登录后投票
   发表时间:2008-12-04  
还有一个就是对于Cache和CDN来说统一的URL是容易管理的。
0 请登录后投票
   发表时间:2008-12-04   最后修改:2008-12-04
现在把问题优化一下,人类可读无歧义的文本码有0-9,A-Z,a-z共62个
设取出x个作为标志位则(62-x) * x + (62 - x) >= 256
解这个二元一次方程得到:
3.366<=X<=57.634
考虑到编码的文本长度,取x的最小值,即 4
最优解:
用0, 1, 2, 3做为标志位
4-9,A-Z, a-z参与编码并与标志位配合实现8位字节的文本化

这种编码的冗余度为80%
0 请登录后投票
   发表时间:2008-12-04  
这个贴子要收藏,很好,以后一定能用得上的。
楼主太强了。
0 请登录后投票
   发表时间:2008-12-04  
yangyi 写道
现在把问题优化一下,人类可读无歧义的文本码有0-9,A-Z,a-z共62个
设取出x个作为标志位则(62-x) * x + (62 - x) >= 256
解这个二元一次方程得到:
3.366<=X<=57.634
考虑到编码的文本长度,取x的最小值,即 4
最优解:
用0, 1, 2, 3做为标志位
4-9,A-Z, a-z参与编码并与标志位配合实现8位字节的文本化

这种编码的冗余度为80%


不好意思·没看懂,能详细点吗?
0 请登录后投票
   发表时间:2008-12-04  
yangyi 写道
6位都已经是无奈之举了,还要用5位,那不是对现有资源的浪费吗,在不增加url长度的情况下充分提高效率,6位编码是最佳的。如果可以任意的饿牺牲url长度,可以把0-9全部拿出来当做标记位,0-9不会单独出现,这样一共有10*26 + 26 = 286 种可能还不包括小写字母,此外还有=,+,-什么的至少256可以编码8位的字节了,这样处理效率就提高了

我是完善的这个帖子
0 请登录后投票
   发表时间:2008-12-04  
全部看完还是一塌糊涂。。。也算是知道几点:1、有利于缩短url;2、是不是也能屏蔽掉有害字符?!3、为啥不用post?都post了,搜索引擎就不收录了。
0 请登录后投票
   发表时间:2008-12-04   最后修改:2008-12-04
   跟效率没有关系, 还有URL的并不能变短, BASE64编码好处是字符编码范围有限度。这么做完全让复杂的URL看上去好看点, 方便SEO。 其他的没有什么问题。 另外一个是隐藏URL的具体参数的含义。 这个需要有个强大的正则表达规则来解析URL, 开发的时候,还是URL?PARAM=XX的形式。 这个问题没有好追究的, 一个简易的URL人们总是比较喜欢而已。
  另外, 还有一个开发经验的问题, URL实际上大小写, 在EMAIL中发送, 都存在各种问题, 完全使用ASCII也可以避免汉字编码问题。 反正这个URL都通过一个专用URL生成的工具完成的。 URL的处理经验是通过血的教训得到的, 那些RFC推荐的规范未必适合做应用。
  不是说这个方法是完美的, 可是能解决很多问题。 网站的性能不是在文本处理上, 目前的CPU的计算能力已经超过很多开发人员的想象了。
  对了, 我不是TAOBAO的, 别PM问我了。。。。
0 请登录后投票
   发表时间:2008-12-04  
air82 写道
我觉得,首先,为什么不用普通的参数,我想是这样,淘宝的服务器压力很大,对应用的性能要求应该很苛刻,搜索的时候你看起来你输入只是一个关键字,实际上远远不止,有几十个参数,如果用一组事先约定好位置的数据来表示各种参数,服务器不用解析那么多的字符串,不用处理那么多的参数名=参数,虽然开发维护起来会增加一些工作量,但是服务器压力会小一些,流量会小一些。
至于编码方式,回应楼上某位同学的话,base64编码不是淘宝自己搞出来的,是email刚出现时特殊历史时期的产物,具体的可以google一下,base64编码后数据量比urlencode少60%左右 



这点计算, 跟性能无关, 实际上这个URL增加了处理URL的时间。
0 请登录后投票
   发表时间:2008-12-04  
sdh5724 写道

这点计算, 跟性能无关, 实际上这个URL增加了处理URL的时间。


跟性能无关也对,从淘宝网上可以看出,以淘宝商城为例:

搜索:gembler

是先post到 - http://list.mall.taobao.com/search_dispatcher.htm

然后分发到 - http://list.mall.taobao.com/search_product.htm?type=p&sort=st&style=g&at_topsearch=1&user_action=initiative&q=gembler

再解析为 - http://list.mall.taobao.com/0/g-st----g,m5sw2ytmmvza-40-0--0.htm - 并redirect。

最后才response

但是这个过程一般是感觉不到
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics