面试前针对去哪儿网进行的分析

网站地址: http://www.qunar.com/
gzip压缩
服务器:QWS/1.0
网站前台架构比较好 简单、轻巧、代码比较整洁干净

有意思的地方
首页不让iframe引用
<script type="text/javascript"> 
try{ 
     if(top != self && location.href.toString().indexOf("index.htm") < 0){ 
          top.location.replace("http://www.qunar.com/index.htm");} 
}  
catch (e){} 
</script>

http://ws.qunar.com/ips.jcp?callback=QNR.ips.callback&_=1365944679272
获取访问用户IP所在的地区

js文件分析
http://qunarzz.com/jquery/prd/jquery-1.7.2.min.js
去哪儿主要依赖jQuery1.7.2。
http://qunarzz.com/home/prd/scripts/geilivible/release/home-2013040219083602.js
比较关键的有自动加载及模板功能:
自动加载patch-2013040219083602.js

模板功能 Hogan
内部使用Array数据存储通过join拼接

模板逻辑
//实例化对象
var o = new MainSliderShowBox();
//调用初始化代码,此方法会触发父类的initData()方法去后台读取数据
o.init();
//后台给予前台数据后,由以下代码进行处理前台模板进行关联并显示
var c = QTMPL[this.moduleName].render(this.format(f)); 
this.render(c); 
this.setupBoxView(); 

this.bindEvent();

标签插件 tabs
切换插件 Switchable
日期插件 qdatepicker
下拉列表插件 yselector
航班搜索框功能 FlightSearchBox
热门城市功能 FlightHotCity
热门团购 HotTuan

//比较关键的初始化代码
(function(e) { 
    document.domain = "qunar.com"; 
    function b() { 
        var r = new FlightSearchBox(); 
        r.init("#js_searchbox_flight"); 
        e("#js_nva_cgy a").click(function(s) { 
            s.preventDefault(); 
        }); 
        var p = e("#js_searchbox"); 
        var o = p.find(".js-searchnav"); 
        var q = p.find(".js-searchbox-panel"); 
        o.click(function() { 
            o.removeClass("cur"); 
            e(this).addClass("cur"); 
            var s = e(this).attr("data-for"); 
            q.hide(); 
            var t = e("#js_searchbox_" + s); 
            t.show(); 
            switch (s) { 
                case "flight": 
                    trackAction("QH|SB|flight"); 
                    break; 
                case "hotel": 
                    e.qload("hotel", function() { 
                        d(t); 
                    }); 
                    trackAction("QH|SB|hotel"); 
                    break; 
                case "tuan": 
                    e.qload("tuan", function() { 
                        a(t); 
                    }); 
                    trackAction("QH|SB|tuan"); 
                    break; 
                case "travel": 
                    e.qload("travel", function() { 
                        initTravel(t); 
                    }); 
                    trackAction("QH|SB|travel"); 
                    break; 
                case "package": 
                    e.qload("package", function() { 
                        n(t); 
                    }); 
                    trackAction("QH|SB|package"); 
                    break; 
                case "mobile": 
                    e.qload("mobile", function() { 
                        l(t); 
                    }); 
                    trackAction("QH|SB|mobile"); 
                    break; 
            } 
        }); 
        h(r); 
    } 
    function d(p) { 
        var o = new HotelSearchBox(); 
        o.init(p); 
    } 
    function a(o) { 
        TuanLoader.load(o); 
    } 
    function n(o) { 
        PackageLoader.load(o); 
    } 
    function l(o) { 
        new Mobile().init(o); 
    } 
    function h(o) { 
        e.qhistory.init({success: function(p) { 
                o.parseHistory(p.flight); 
            }}); 
    } 
    function g() { 
        var o = new MainSliderShowBox(); 
        o.init(); 
    } 
    function f() { 
        var o = new HotTuanBox(); 
        o.init(); 
    } 
    function k() { 
        var o = new QuarterHotBox(); 
        o.init(); 
    } 
    function i() { 
        var o = new StrategyBox(); 
        o.init(); 
    } 
    function m() { 
        var o = new JourneyClientBox(); 
        o.init(); 
    } 
    function j() { 
        var o = new HotelNewModBox(); 
        o.init(); 
    } 
    function c() { 
    } 
    b(); 
    g(); 
    f(); 
    e.qload("patch", function() { 
        k(); 
        i(); 
        m(); 
        j(); 
    }); 
})(jQuery);

http://qunarzz.com/home/prd/scripts/geilivible/release/patch-2013040219083602.js
此js里面大部分也为插件功能就不一一列举

此2个文件为去哪儿内部js框架封装,此封装非常小巧,可以方便及提高开发效率。


你可能感兴趣的:(去哪儿网)