一键拨打热线服务
前言
自从上一篇“
前几次对去哪儿的源码感兴趣的是在一次我需要航班信息的时候,那段时间我对去哪儿的代码有过一些时间的分析,并且成功地抓取去哪儿的航班和酒店数 据,仅作学习之用,请去哪儿不要找我了,呵呵。
我想这次分析要稍为严谨一丁点儿,要不然会有较真的人要骂我。我准备从代码质量、Javascript、CSS、url及网址结构、广告、图片等多 个方面进行分析。
架构试探
虽然只是分析了前台的代码,但所谓管中窥豹可见一斑,根据我以前对qunar的代码分析,**从这些前台的代码,我们也可以看到系统结构的一些端倪 的。去哪儿整个网站的重点是在搜索,我想他们是有一个爬虫以及和各大航空公司/旅游代理网站的接口在后台来做数据的采集,这个是重点。然后对采集回来的数 据进行分析之后,定时生成JSON静态数据,前台调用采用Ajax的模式,以提高响应速度。我觉得去哪儿这种方式非常好,因为数据都是定时更新的,把每个 城市的数据都生成静态的json,特别是一些不常更新的数据,比如航空公司,酒店,航班信息等,有利于提高响应速度和降低服务器的压力。数据和实现分离也 很**,自己的网站通过WebAPI读取,有利于产品化,以及方便与第三方合作,实现公司灵活快速地根据实际情况调整产品。
我自己估计的 Qunar大体架构
这样做同时也有缺点,因为你的数据非常的干净,别人要取就很容易了,反正我是取过去哪儿很干净的数据,干净而透明,呵呵。可能是去哪儿觉得这些数据 都是比较实时的,你就算拿到这些数据也没有用。但是我觉得尽管如此,还是应该在服务器加一些限制,对请求数量进行限制,或者加一些别的限制,这样有利于防 止机器请求,提高服务器的可用率。
|||
首页分析
首先还是来看首页,我觉得去哪儿的网站是优化得比较好的网站之一了,去哪儿的首页一共有114.9k,共41个请求数,个人认为请求数有些过多(主要是广告部分),可以适当降低请求数。
静态文件
去哪儿的静态文件似乎并非统一放在前几立的服务器上,而是不同的频道有不同的静态内容服务器(我指的是逻辑服务器),像source.qunar.com,hotel.qunar.com等等,这样做有好处有坏处,好处是各项目组(我认为qunar不同频道是同不同的项目组前几立负责的,这样有利于产品化)管各自的静态文件就ok了,坏处是不利于统一管理。我建议可以这样,把静态文件统一部署到一台/组服务器,各频道可以采用不同的逻辑服务器放置静态文件。这样便于统一管理,特别是去哪儿JS静态文件比较多,便于统一做CDN,因为动态内容和静态文件采用的CDN技术不一样,价格也不一样,有利于节省成本。
图片去哪儿首页的图片非常少,少得让人吃惊,但你并不觉得这个网站太难看,反而觉得很清爽,我认为图片应该尽可能少,图片只是在文字不能传达某个意思的时候才使用图片,这样可以起到画龙占睛的作用,也有利于SEO,当然图片壁纸站除外。
压缩
服务器上有启用Gzip压缩,有利于减小传输量,特别是对于去哪儿采用定时生成JSON静态数据的情况下,Gzip更能发挥作用。同时CSS文件,也有采用去注释和空行的压缩方式。但是我不明白的是,为什么有些javascript却没有经过压缩呢?例如在文件:http://hotel.qunar.com/scripts/hotel/recommandHotels.js?15182155276,不仅可以看到换行,还可以看到明显的注释
数据与实现分离
实际上就是指CSS/JS和Html以及数据,有没有很好地分离,我觉得这方面,去哪儿还是做得不错,首页的HTML代码非常轻巧,但有点我不明白,为什么去哪儿并未完全采用Div + CSS,而在首页还掺杂有Table呢,我觉得去哪儿的首页并没有需要用到Table的地方,完全可以全部采用Div+CSS进行布局。如果我没估计错的话,去哪儿的首页应该也是自动生成静态页面,并且是采用xml+xslt或者类似的方式,因为它源代码的空行方式很类似于xml+xslt的结果。
广告
相比去哪儿的版面来说,首页广告是非常之多,我觉得可能比新浪的广告比例还要高,但你完全没有不舒服的感觉。我想一方面,是去哪儿的广告内容和网站主题很匹配,主要是机票和酒店类的广告,另一方面,是由于广告位置以及广告与网站的溶入度非常高,说得白一点,就是去哪儿给广告穿了一件迷彩服,一般人以为不是广告,实际上他是广告。
我认为去哪儿的广告点击率应该很高,起码不低。首先,在颜色的配置上,去哪儿的广告颜色与整个页面一致,广告没有太明显的标识,这样有利于用户点击广告,特别是对于对网站不熟悉的用户,很容易受这些广告的诱惑去点击广告。但从另一个角度来说,广告主所得到的回报率可能会偏少。从我的观察来发现,越是菜鸟的用户,越容易点广告,但点完广告带来的价值偏少,而成熟的用户点击广告都是比较理性,给广告主带来的回报率会比较高。
URL/域名
去哪儿每个频道都有一个二级域名,并且还有其它更多的二级域名,一方面,二级域名有得SEO和用户记忆,但过多的域名,也难于管理。我不觉得目前去哪儿需要这么多的二级域名,缩少到5-8个即可。
总结
我个人认为,去哪儿的技术上应该是比较不错的,像一些细节的地方都有作处理,但是也有些需要改正地方,如没有防止数据采集(或者灵敏度太低),就算不担心数据被利用,也应该考虑到对服务器的压力;JS/CSS文件过于分散,JS代码没有进行清理与压缩(不是指gzip);HTML代码还可以更加简洁一些,有些代码完全是很无聊的嵌套,可以再行精简,加快浏览器的解析。
后记
上面的分析报告是在去Qcon大会之前写成的,为了保证它的原汁原味,我没有作任何修改。我记得在Qcon大会上的吴永强说他们的数据是实时抓取的,就这一点,我谈谈我的看法,我认为实时抓取是不可能的,虽然机票这个东西价格变化很快,但肯定不可能做到实时抓取。原因如下:
前几、如果是全部都实时抓取,去哪儿的带宽和服务器都受不了,就算做到了,也不经济
**、以去哪儿每天100万以上的访问量,如果是实时抓取数据,被抓的网站受不了
我认为比较可行的办法是这样的,去哪儿抓取的网站应该分为两种,即合作伙伴和非合作伙伴,合伙伙伴比较好说了,他们可以提供API接口,这部分的机票信息肯定是实时的。另一种是非合作伙伴,这些网站应该有一个缓存策略,根据去哪儿以往去这些网站抓取的数据分析他们机票的更新速度来确定缓存失效时间。去哪儿有一个爬虫根据更新策略把数据抓到缓存中,这样用户在请求的时候,实际上是在读这个缓存(生成JSON数据)。不知道去哪儿现在是不是这样的方法呢?
网站技术分析报告之——去哪儿,希望对您有用。