zoukankan      html  css  js  c++  java
  • 谷歌 analytics.js 简要分析

    下面是部分翻译过的JS,看起来好看些。

     

    (function () {
        function setHref(a, b) {
            return a.href = b;
        }
        function setName(a, b) {
            return a.name = b;
        }
        //使用情况的埋点
        var allusage = new function () {
            var array = [];
            this.set = function (b) {
                array[b]= true;
            };
            this.usageFlag = function () {
                for(var b = [], c = 0; c < array.length; c++) {
                    array[c]&& (b[Math.floor(c / 6)] = b[Math.floor(c / 6)] ^ 1 << c % 6);
                }
                for (c = 0; c < b.length; c++) {
                    b[c]= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_".charAt(b[c]|| 0);
                }
                return b.join("") + "~";
            };
        };
    
        //设置信息标志
        function setMsgCode(a) {
            allusage.set(a);
        };
    
        function isFunction(a) {
            return "function" == typeof a;
        }
    
        function isArray(a) {
            return "[object Array]" == Object.prototype.toString.call(Object(a));
        }
    
        function isString(a) {
    
            return void 0 != a && - 1 < (a.constructor + "").indexOf("String");
        }
    
        function inString(a, b) {
            return 0 == a.indexOf(b);
        }
    
        //去除空格
        function removeBlank(a) {
            return a ? a.replace(/^[sxa0]+|[sxa0]+$/g, ""): "";
        }
    
        function Td() {
            return [roundCode() ^ Mc() & 0x7FFFFFFF, Math.round((new Date).getTime() / 1E3)].join(".");
        }
    
        function createImg(a) {
            var b = document.createElement("img");
            b.width = 1;
            b.height = 1;
            b.src = a;
            return b;
        }
    
        function emptyFunction() {
        }
    
        function encodeUri(a) {
            if(encodeURIComponent instanceof Function) return encodeURIComponent(a);
            setMsgCode(28);
            return a;
        }
    
        //对括号进行编码
        function encodeBracket(a) {
            return encodeUri(a).replace(/(/g, "%28").replace(/)/g, "%29");
        }
    
        var addEvent = function (a, b, c, d) {
            try {
                a.addEventListener ? a.addEventListener(b, c, !!d): a.attachEvent && a.attachEvent("on" +b, c);
            } catch (e) {
                setMsgCode(27);
            }
        };
        var removeEvent = function (a, b, c) {
            a.removeEventListener ? a.removeEventListener(b, c, false): a.detachEvent && a.detachEvent("on" +b, c);
        };
    
        function createScript(a, b) {
            if(a) {
                var c = document.createElement("script");
                c.type = "text/javascript";
                c.async = true;
                c.src = a;
                c.id = b;
                var d = document.getElementsByTagName("script")[0];
                d.parentNode.insertBefore(c, d);
            }
        }
    
        function getProtocol() {
            return Ba || "https:" == document.location.protocol ? "https:" : "http:";
        }
    
        function getHostname() {
            var a = "" + document.location.hostname;
            return 0 == a.indexOf("www.") ? a.substring(4): a;
        }
    
        function getReferrer(a) {
            var b = document.referrer;
            if (/^https?:///i.test(b)) {
                if (a) return b;
                a = "//" + document.location.hostname;
                var c = b.indexOf(a);
                if (5 == c || 6 == c) if (a = b.charAt(c +a.length), "/" == a || "?" == a || "" == a || ":" == a) return;
                return b;
            }
        }
    
        function preParameters(a, b) {
    
            if(1 == b.length && null != b[0] && "object" === typeof b[0]) return b[0];
            for (var c = { },
                d = Math.min(a.length +1, b.length),
                e = 0; e < d; e++)
                if ("object" === typeof b[e]) {
                    for (var g in b[e]) b[e].hasOwnProperty(g) &&(c[g] = b[e][g]);
                    break;
                } else e < a.length && (c[a[e]]= b[e]);
            return c;
        };
    
        //用于存在储键值对应的容器
        var kVContainer = function () {
            this.keys =[];
            this.w = { };
            this.m = { };
        };
        kVContainer.prototype.set = function (a, b, c) {
            this.keys.push(a);
            c ? this.m[":" +a] = b: this.w[":" +a] = b;
        };
        kVContainer.prototype.get = function (a) {
            return this.m.hasOwnProperty(":" +a) ? this.m[":" +a] : this.w[":" +a];
        };
        kVContainer.prototype.map = function (a) {
            for(var b = 0; b < this.keys.length; b++) {
                var c = this.keys[b];
                var d = this.get(c);
                d && a(c, d);
            }
        };
    
        //是否禁用了跟踪,参见帮助文档
        var isDisabledTrack = function (a) {
    
    
            return false;
        };
        var fb = function (a) {
            setTimeout(a, 100);
        };
        var getCookieValue = function (a) {
    
            var b = [],
                c = document.cookie.split(";");
            a = new RegExp("^\s*" +a + "=\s*(.*?)\s*$");
            for (var d = 0; d < c.length; d++) {
                var e = c[d].match(a);
                e && b.push(e[1]);
            }
    
            return b;
        };
        var getsetCookie = function (a, b, c, d, e, g) {
            //如果被禁用或自身几个网站,不进行跟踪,返回False
            e = isDisabledTrack(e) ? false : regDoubleclick.test(document.location.hostname) || "/" == c && regGoogleSite.test(d) ? false : true;
            if (!e) return false;
    
            b && 1200 < b.length && (b = b.substring(0, 1200), setMsgCode(24));
            c = a + "=" + b + "; path=" +c + "; ";
            g && (c += "expires=" +(new Date((new Date).getTime() +g)).toGMTString() + "; ");
            d && "none" != d && (c += "domain=" +d + ";");
            d = document.cookie;
            document.cookie = c;
            if (!(d = d != document.cookie))
                t: {
                a = getCookieValue(a);
                for (d = 0; d < a.length; d++)
                    if (b == a[d]) {
                        d = true;
                        break t;
                    }
                d = false;
            }
            return d;
        };
        var regGoogleSite = new RegExp(/^(www.)?google(.com?)?(.[a-z]{2})?$/);
        var regDoubleclick = new RegExp(/(^|.)doubleclick.net$/i);
        var Mc = function () {
            //debugger;
            for(var a = window.navigator.userAgent
                         + (document.cookie ? document.cookie: "")
                         + (document.referrer ? document.referrer: ""),
                b = a.length,
                c = window.history.length;
                0 < c;) {
                a += c-- ^ b++;
            }
            return La(a);
        };
        var oc = function () {
            return getProtocol() + "//localhost:25388";
            //return getProtocol() + "//www.google-analytics.com";
        };
        var lenException = function (a) {
            setName(this, "len");
            this.message = a + "-8192";
        };
        //firefox error
        var ff2postException = function (a) {
            setName(this, "ff2post");
            this.message = a + "-2036";
        };
        //如果支持sendBeacon 就使用它,
        var sendRequest = function (targetUrl, datas, callback, sendBeaconCallback) {
            callback = callback || emptyFunction;
            //优先使用sendBeaconCallback
            sendBeaconCallback && (sendBeaconCallback = callback, window.navigator.sendBeacon ?
                window.navigator.sendBeacon(targetUrl, datas) ?
                (sendBeaconCallback(), sendBeaconCallback = true) : sendBeaconCallback = false : sendBeaconCallback = false);
    
            if (!sendBeaconCallback) {
                if (2036 >= datas.length) {
                    imageRequest(targetUrl, datas, callback);
                } else if (8192 >= datas.length) {
    
                    if (0 <= window.navigator.userAgent.indexOf("Firefox") && ![].reduce) {
                        throw new ff2postException(datas.length);
                    }
    
                    XMLHttpRequest(targetUrl, datas, callback) || XDomainRequest(targetUrl, datas, callback) || IframeRequest(datas, callback) || callback();
                } else {
                    throw new lenException(datas.length);
                }
            }
        };
        //图片的请求方式
        var imageRequest = function (a, b, c) {
            var d = createImg(a + "?" + b);
            d.onload = d.onerror = function () {
                d.onload = null;
                d.onerror = null;
                c();
            };
        };
        //XDomainRequest 
        var XDomainRequest = function (a, b, c) {
            var d;
            d = window.XDomainRequest;
            if (!d) return false;
            d = new d;
            d.open("POST", a);
            d.onerror = function () {
                c();
            };
            d.onload = c;
            d.send(b);
            return true;
        };
        var XMLHttpRequest = function (a, b, c) {
            var d = window.XMLHttpRequest;
            if (!d) return false;
            var e = new d;
            if (!("withCredentials" in e)) return false;
            e.open("POST", a, true);
            e.withCredentials = true;
            e.setRequestHeader("Content-Type", "text/plain");
            e.onreadystatechange = function () {
                4 == e.readyState && (c(), e = null);
            };
            e.send(b);
            return true;
        };
        var IframeRequest = function (a, b) {
            if(!document.body)
                return fb(function () {
                    IframeRequest(a, b);
                }),
                    true;
            a = encodeURIComponent(a);
            try {
                var c = document.createElement('<iframe name="' +a + '"></iframe>');
            } catch (d) {
                c = document.createElement("iframe"),
                    setName(c, a);
            }
            c.height = "0";
            c.width = "0";
            c.style.display = "none";
            c.style.visibility = "hidden";
            var e = document.location,
                e = oc() + "/analytics_iframe.html#" + encodeURIComponent(e.protocol + "//" + e.host + "/favicon.ico"),
                g = function () {
                    c.src = "";
                    c.parentNode && c.parentNode.removeChild(c);
                };
            addEvent(window, "beforeunload", g);
            var ca = false,
                l = 0,
                k = function () {
                    if(!ca) {
                        try {
                            if (9 < l || c.contentWindow.location.host == document.location.host) {
                                ca = true;
                                g();
                                removeEvent(window, "beforeunload", g);
                                b();
                                return;
                            }
                        } catch (a) {
                        }
                        l++;
                        setTimeout(k, 200);
                    }
                };
            addEvent(c, "load", k);
            document.body.appendChild(c);
            c.src = e;
            return true;
        };
        var Ha = function () {
            this.t =[];
        };
        Ha.prototype.add = function (a) {
            this.t.push(a);
        };
        Ha.prototype.D = function (a) {
            try {
                for (var b = 0; b < this.t.length; b++) {
                    var c = a.get(this.t[b]);
                    c && isFunction(c) && c.call(window, a);
                }
            } catch (d) {
            }
            b = a.get(hitCallback);
            b != emptyFunction && isFunction(b) &&(a.set(hitCallback, emptyFunction, true), setTimeout(b, 10));
        };
    
        function checksampler(a) {
            if(100 != a.get(sampleRate) && La(getStrConfig(a, clientId)) % 1E4 >= 100 * getIntConfig(a, sampleRate)) throw "abort";
        }
    
        function checkisDisabledTrack(a) {
            if(isDisabledTrack(getStrConfig(a, trackingId))) throw "abort";
        }
    
        function checkProtocol() {
            var a = document.location.protocol;
            if ("http:" != a && "https:" != a) throw "abort";
        }
    
        function buildHitTasks(a) {
    
            try {
                window.XMLHttpRequest && "withCredentials" in new window.XMLHttpRequest ? setMsgCode(40): window.XDomainRequest && setMsgCode(41),
                    window.navigator.sendBeacon && setMsgCode(42);
            } catch (b) {
            }
            a.set(stepInPage, getIntConfig(a, stepInPage) +1);
            var c = [];
            Qa.map(function(b, d) {
                if(d.p) {
                    var e = a.get(b);
                    void 0 != e && e != d.defaultValue && ("boolean" == typeof e && (e *= 1), c.push(d.p + "=" + encodeUri("" +e)));
                }
            });
            if (Ed(new Od(1E4))) {
                var d = [];
                d.push(round1());
                d.push.apply(d, Td().split("."));
                d.push(round2());
                var e;
                e = window.crypto ? true : false;
                d.push(e ? "c": "b");
                c.push("z=" +d.join("."));
            } else c.push("z=" +round2());
            a.set(hitPayload, c.join("&"), true);
        }
    
        function sendHitTasks(a) {
    
            var b = getStrConfig(a, transportUrl) || oc() + "/collect";
            sendRequest(b, getStrConfig(a, hitPayload), a.get(hitCallback), a.get(useBeacon));
            a.set(hitCallback, emptyFunction, true);
        }
    
        function Hc(a) {
            var b = window.gaData;
            b && (b.expId && a.set(Nc, b.expId), b.expVar && a.set(Oc, b.expVar));
        }
    
        function checkpreviewTask() {
            if(window.navigator && "preview" == window.navigator.loadPurpose) throw "abort";
        }
    
    
        function checkTrackidexist(a) {
            if(!a.get(trackingId)) throw "abort";
        };
    
        var round1 = function () {
            return Math.round(0x7FFFFFFF * Math.random());
        };
        var round2 = function () {
            try {
                var a = new Uint32Array(1);
                window.crypto.getRandomValues(a);
                return a[0]& 0x7FFFFFFF;
            } catch (b) {
                return round1();
            }
        };
        var roundCode = round1;
    
        function Ta(a) {
            var b = getIntConfig(a, Ua);
            500 <= b && setMsgCode(15);
            var c = getStrConfig(a, hitType);
            if ("transaction" != c && "item" != c) {
                var c = getIntConfig(a, Wa),
                    d = (new Date).getTime(),
                    e = getIntConfig(a, Xa);
                0 == e && a.set(Xa, d);
                e = Math.round(2 * (d - e) / 1E3);
                0 < e && (c = Math.min(c +e, 20), a.set(Xa, d));
                if (0 >= c) throw "abort";
                a.set(Wa, --c);
            }
            a.set(Ua, ++b);
        };
    
        var settings = function () {
            this.data = new kVContainer;
        };
        var Qa = new kVContainer;
        var Za = [];
        settings.prototype.get = function (a) {
            var b = $a(a);
            var c = this.data.get(a);
            b && void 0 == c && (c = isFunction(b.defaultValue) ? b.defaultValue(): b.defaultValue);
            return b && b.n ? b.n(this, a, c): c;
        };
        settings.prototype.set = function (a, b, c) {
            if(a)
                if ("object" == typeof a) {
                    for (var d in a) {
                        a.hasOwnProperty(d) && ab(this, d, a[d], c);
                    }
                } else {
                    ab(this, a, b, c);
                }
        };
        var getStrConfig = function (a, b) {
            var c = a.get(b);
            return void 0 == c ? "" : "" + c;
        };
        var getIntConfig = function (a, b) {
    
            var c = a.get(b);
            return void 0 == c || "" === c ? 0 : 1 * c;
        };
    
        var ab = function (a, b, c, d) {
            if(void 0 != c)
                switch (b) {
                    case trackingId:
                        wb.test(c);
                    }
            var e = $a(b);
            e && e.o ? e.o(a, b, c, d): a.data.set(b, c, d);
        };
        var bb = function (aName, bshortName, cdefaultValue, d, e) {
            setName(this, aName);
            this.p = bshortName;
            this.n = d;
            this.o = e;
            this.defaultValue = cdefaultValue;
        };
        var $a = function (a) {
            var b = Qa.get(a);
            if (!b)
                for (var c = 0; c < Za.length; c++) {
                    var d = Za[c],
                        e = d[0].exec(a);
                    if (e) {
                        b = d[1](e);
                        Qa.set(b.name, b);
                        break;
                    }
                }
            return b;
        };
        var yc = function (a) {
            var b;
            Qa.map(function(c, d) {
                d.p == a && (b = d);
            });
            return b && b.name;
        };
        var S = function (aName, bshortName, cdefaultValue, d, e) {
            aName = new bb(aName, bshortName, cdefaultValue, d, e);
            Qa.set(aName.name, aName);
            return aName.name;
        };
        var cb = function (a, b) {
            Za.push([new RegExp("^" +a + "$"), b]);
        };
        var T = function (aName, bshortName, cdefaultValue) {
    
            return S(aName, bshortName, cdefaultValue, void 0, db);
        };
        var db = function () {
        };
    
        var WXAnalyticsObjectName = isString(window.WXAnalyticsObject) && removeBlank(window.WXAnalyticsObject) || "wa";
        var Ba = false;
        var apiVersion = T("apiVersion", "v");
        var clientVersion = T("clientVersion", "_v");
        S("anonymizeIp", "aip");
    
        var hitType = S("hitType", "t");
    
        var hitCallback = S("hitCallback");
        var hitPayload = S("hitPayload");
        S("nonInteraction", "ni");
        S("currencyCode", "cu");
        var useBeacon = S("useBeacon", void 0, false);
        S("dataSource", "ds");
        S("sessionControl", "sc", "");
        S("sessionGroup", "sg");
        S("queueTime", "qt");
        var stepInPage = S("_s", "_s");
        S("screenName", "cd");
        var kb = S("location", "dl", "");
        var lb = S("referrer", "dr");
        var mb = S("page", "dp", "");
        S("hostname", "dh");
        var nb = S("language", "ul");
        var ob = S("encoding", "de");
        S("title", "dt",
            function () {
                return document.title || void 0;
            });
        cb("contentGroup([0-9]+)",
            function (a) {
                return new bb(a[0], "cg" +a[1]);
            });
        var pb = S("screenColors", "sd");
        var qb = S("screenResolution", "sr");
        var rb = S("viewportSize", "vp");
        var sb = S("javaEnabled", "je");
        var tb = S("flashVersion", "fl");
        S("campaignId", "ci");
        S("campaignName", "cn");
        S("campaignSource", "cs");
        S("campaignMedium", "cm");
        S("campaignKeyword", "ck");
        S("campaignContent", "cc");
        var ub = S("eventCategory", "ec");
        var xb = S("eventAction", "ea");
        var yb = S("eventLabel", "el");
        var zb = S("eventValue", "ev");
        var Bb = S("socialNetwork", "sn");
        var Cb = S("socialAction", "sa");
        var Db = S("socialTarget", "st");
        var Eb = S("l1", "plt");
        var Fb = S("l2", "pdt");
        var Gb = S("l3", "dns");
        var Hb = S("l4", "rrt");
        var Ib = S("l5", "srt");
        var Jb = S("l6", "tcp");
        var Kb = S("l7", "dit");
        var Lb = S("l8", "clt");
        var Mb = S("timingCategory", "utc");
        var Nb = S("timingVar", "utv");
        var Ob = S("timingLabel", "utl");
        var Pb = S("timingValue", "utt");
        S("appName", "an");
        S("appVersion", "av", "");
        S("appId", "aid", "");
        S("appInstallerId", "aiid", "");
        S("exDescription", "exd");
        S("exFatal", "exf");
        var Nc = S("expId", "xid");
        var Oc = S("expVar", "xvar");
    
        var Ua = S("_hc", void 0, 0);
        var Xa = S("_ti", void 0, 0);
        var Wa = S("_to", void 0, 20);
        cb("dimension([0-9]+)",
            function (a) {
                return new bb(a[0], "cd" +a[1]);
            });
        cb("metric([0-9]+)",
            function (a) {
                return new bb(a[0], "cm" +a[1]);
            });
        S("linkerParam", void 0, void 0, Bc, db);
        var ld = S("usage", "_u", void 0, function () {
            return allusage.usageFlag();
        }, db);
    
        S("forceSSL", void 0, void 0,
            function () {
                return Ba;
            },
            function (a, b, c) {
                setMsgCode(34);
                Ba = !!c;
            });
        //var ed = S("_j1", "jid");
        //var Hd = S("_j2", "gjid");
        cb("\&(.*)",
            function (a) {
                var b = new bb(a[0], a[1]),
                    c = yc(a[0].substring(1));
                c && (b.n = function (a) {
                    return a.get(c);
                },
                    b.o = function (a, b, g, ca) {
                        a.set(c, g, ca);
                    },
                    b.p = void 0);
                return b;
            });
        var _oot = T("_oot");
        var previewTask = S("previewTask");
        var checkProtocolTask = S("checkProtocolTask");
        var validationTask = S("validationTask");
        var checkStorageTask = S("checkStorageTask");
        //var historyImportTask = S("historyImportTask");
        var samplerTask = S("samplerTask");
        var _rlt = T("_rlt");
        var buildHitTask = S("buildHitTask");
        var sendHitTask = S("sendHitTask");
        var ceTask = S("ceTask");
        //var devIdTask = S("devIdTask");
        var timingTask = S("timingTask");
        //var displayFeaturesTask = S("displayFeaturesTask");
        var V = T("name");
        var clientId = T("clientId", "cid");
        var userId = S("userId", "uid");
        var trackingId = T("trackingId", "tid");
        var cookieName = T("cookieName", void 0, "_wa");
        var cookieDomain = T("cookieDomain");
        var cookiePath = T("cookiePath", void 0, "/");
        var cookieExpires = T("cookieExpires", void 0, 63072E3);
        var legacyCookieDomain = T("legacyCookieDomain");
        //var legacyHistoryImport = T("legacyHistoryImport", void 0, true);
        var storage = T("storage", void 0, "cookie");
        //var allowLinker = T("allowLinker", void 0, false);
        //var allowAnchor = T("allowAnchor", void 0, true);
        var sampleRate = T("sampleRate", "sf", 100);
        var siteSpeedSampleRate = T("siteSpeedSampleRate", void 0, 1);
        var alwaysSendReferrer = T("alwaysSendReferrer", void 0, false);
        var transportUrl = S("transportUrl");
    
        //var _r = S("_r", "_r");
        //var _dfr = S("_dfr", void 0, 1);
    
        function createCommands(commandName, b, c, d) {
            b[commandName]= function () {
                try {
                    return d && setMsgCode(d),
                        c.apply(this, arguments);
                } catch (b) {
                    var g = b && b.name;
                    if (!(1 <= 100 * Math.random() || isDisabledTrack("?"))) {
                        var ca = ["t=error", "_e=exc", "_v=j30", "sr=1"];
                        commandName && ca.push("_f=" + commandName);
                        g && ca.push("_m=" + encodeUri(g.substring(0, 100)));
                        ca.push("aip=1");
                        ca.push("z=" +roundCode());
                        sendRequest(oc() + "/collect", ca.join("&"));
                    }
                    throw b;
                }
            };
        };
    
        var Od = function (a) {
            this.V = a;
            this.fa = void 0;
            this.$ = false;
            this.ha = void 0;
            this.ea = 1;
        };
        var Ed = function (a, b, c) {
            if(a.fa && a.$) return 0;
            a.$ = true;
            if (b) {
                if (a.ha && getIntConfig(b, a.ha)) return getIntConfig(b, a.ha);
                if (0 == b.get(siteSpeedSampleRate)) return 0;
            }
            if (0 == a.V) return 0;
            void 0 === c && (c = round2());
            return 0 == c % a.V ? Math.floor(c / a.V) % a.ea + 1: 0;
        };
    
        function flashVersion() {
            var a, b, c;
            if ((c = (c = window.navigator) ? c.plugins : null) && c.length)
                for (var d = 0; d < c.length && !b; d++) {
                    var e = c[d];
                    -1 < e.name.indexOf("Shockwave Flash") && (b = e.description);
                }
            if (!b)
                try {
                    a = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"),
                        b = a.GetVariable("$version");
                } catch (g) {
    
                }
            if (!b)
                try {
                    a = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"),
                        b = "WIN 6,0,21,0",
                        a.AllowScriptAccess = "always",
                        b = a.GetVariable("$version");
                } catch (ca) {
                }
            if (!b)
                try {
                    a = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"),
                        b = a.GetVariable("$version");
                } catch (l) {
                }
            b && (a = b.match(/[d]+/g)) && 3 <= a.length && (b = a[0] + "." + a[1] + " r" + a[2]);
            return b || void 0;
        };
    
        var collectPerformance = function (a, b) {
            var c = Math.min(getIntConfig(a, siteSpeedSampleRate), 100);
            if (!(La(getStrConfig(a, clientId)) % 100 >= c) && (c = { },
                getperformance(c) || getperformance2(c))) {
                var d = c[Eb];
                void 0 == d || Infinity == d || isNaN(d) ||
                (0 < d ? (Y(c, Gb), Y(c, Jb), Y(c, Ib), Y(c, Fb), Y(c, Hb), Y(c, Kb), Y(c, Lb), b(c)):
                    addEvent(window, "load",
                        function () {
                            collectPerformance(a, b);
                        },
                        false));
            }
        };
        var getperformance = function (a) {
            var b = window.performance || window.webkitPerformance,
                b = b && b.timing;
            if (!b) return false;
            var c = b.navigationStart;
            if (0 == c) return false;
            a[Eb]= b.loadEventStart -c;
            a[Gb]= b.domainLookupEnd -b.domainLookupStart;
            a[Jb]= b.connectEnd -b.connectStart;
            a[Ib]= b.responseStart -b.requestStart;
            a[Fb]= b.responseEnd -b.responseStart;
            a[Hb]= b.fetchStart -c;
            a[Kb]= b.domInteractive -c;
            a[Lb]= b.domContentLoadedEventStart -c;
            return true;
        };
        var getperformance2 = function (a) {
            if(window.top != window) return false;
            var b = window.external,
                c = b && b.onloadT;
            b && !b.isValidLoadTime && (c = void 0);
            2147483648 < c && (c = void 0);
            0 < c && b.setPageReadyTime();
            if (void 0 == c) return false;
            a[Eb]= c;
            return true;
        };
        var Y = function (a, b) {
            var c = a[b];
            if (isNaN(c) || Infinity == c || 0 > c) a[b]= void 0;
        };
        var sendTiming = function (a) {
            return function (b) {
                "pageview" != b.get(hitType) || a.I || (a.I = true, collectPerformance(b,
                    function (b) {
                        a.send("timing", b);
                    }));
            };
        };
        var hc = false;
        var mc = function (a) {
            if("cookie" == getStrConfig(a, storage)) {
                var b = getStrConfig(a, cookieName),
                    c = nd(a),
                    d = kc(getStrConfig(a, cookiePath)),
                    e = lc(getStrConfig(a, cookieDomain)),
                    g = 1E3 * getIntConfig(a, cookieExpires),
                    ca = getStrConfig(a, trackingId);
                if ("auto" != e) getsetCookie(b, c, d, e, ca, g) && (hc = true);
                else {
                    setMsgCode(32);
                    var l;
                    t: {
                        c =[];
                        e = getHostname().split(".");
                        if (4 == e.length && (l = e[e.length -1], parseInt(l, 10) == l)) {
                            l =["none"];
                            break t;
                        }
                        for (l = e.length -2; 0 <= l; l--) c.push(e.slice(l).join("."));
                        c.push("none");
                        l = c;
                        }
                    for (var k = 0; k < l.length; k++)
                        if (e = l[k], a.data.set(cookieDomain, e), c = nd(a), getsetCookie(b, c, d, e, ca, g)) {
                            hc = true;
                            return;
                        }
                    a.data.set(cookieDomain, "auto");
                }
            }
        };
        var checkStorage = function (a) {
            if("cookie" == getStrConfig(a, storage) && !hc && (mc(a), !hc)) throw "abort";
        };
    
        var nd = function (a) {
    
            var b = encodeBracket(getStrConfig(a, clientId));
            var c = ic(getStrConfig(a, cookieDomain));
            a = jc(getStrConfig(a, cookiePath));
            1 < a && (c += "-" + a);
            return ["MY_A1", c, b].join(".");
        };
        var Gc = function (a, b, c) {
            for(var d = [], e =[], g, ca = 0; ca < a.length; ca++) {
                var l = a[ca];
                if (l.r[c]== b) d.push(l);
                else void 0 == g || l.r[c] < g ? (e = [l], g = l.r[c]): l.r[c] == g && e.push(l);
            }
            return 0 < d.length ? d: e;
        };
        var lc = function (a) {
            return 0 == a.indexOf(".") ? a.substr(1): a;
        };
        var ic = function (a) {
            return lc(a).split(".").length;
        };
        var kc = function (a) {
            if(!a) return "/";
            1 < a.length && a.lastIndexOf("/") == a.length -1 && (a = a.substr(0, a.length -1));
            0 != a.indexOf("/") &&(a = "/" + a);
            return a;
        };
        var jc = function (a) {
            a = kc(a);
            return "/" == a ? 1 : a.split("/").length;
        };
    
        function Xc(a, b, c) {
            "none" == b && (b = "");
            var d = [],
                e = getCookieValue(a);
            a = "__utma" == a ? 6 : 2;
            for (var g = 0; g < e.length; g++) {
                var ca = ("" + e[g]).split(".");
                ca.length >= a && d.push({
                        hash: ca[0],
                        R: e[g],
                        O: ca
                    });
            }
            return 0 == d.length ? void 0 : 1 == d.length ? d[0] : Zc(b, d) || Zc(c, d) || Zc(null, d) || d[0];
        }
    
        function Zc(a, b) {
            var c, d;
            null == a ? c = d = 1 : (c = La(a), d = La(inString(a, ".") ? a.substring(1): "." + a));
            for (var e = 0; e < b.length; e++) if (b[e].hash == c || b[e].hash == d) return b[e];
        };
    
        var od = new RegExp(/^https?://([^/:]+)/);
        var pd = /(.*)([?&#])(?:_wa=[^&#]*)(?:&?)(.*)/;
    
        function Bc(a) {
            a = a.get(clientId);
            var b = Ic(a, 0);
            return "_wa=1." + encodeUri(b + "." + a);
        }
    
        function Ic(a, b) {
            for(var c = new Date,
                d = window.navigator,
                e = d.plugins ||[],
                c =[a, d.userAgent, c.getTimezoneOffset(), c.getYear(), c.getDate(), c.getHours(), c.getMinutes() +b],
                d = 0; d < e.length; ++d) c.push(e[d].description);
            return La(c.join("."));
        }
    
        var Dc = function (a) {
            setMsgCode(48);
            this.target = a;
            this.T = false;
        };
        Dc.prototype.Q = function (a, b) {
            if(a.tagName) {
                if ("a" == a.tagName.toLowerCase()) {
                    a.href && setHref(a, qd(this, a.href, b));
                    return;
                }
                if ("form" == a.tagName.toLowerCase()) return rd(this, a);
            }
            if ("string" == typeof a) return qd(this, a, b);
        };
        var qd = function (a, b, c) {
            var d = pd.exec(b);
            d && 3 <= d.length && (b = d[1] + (d[3] ? d[2] + d[3] : ""));
            a = a.target.get("linkerParam");
            var e = b.indexOf("?"),
                d = b.indexOf("#");
            c ? b += (- 1 == d ? "#" : "&") + a : (c = - 1 == e ? "?" : "&", b = -1 == d ? b + (c + a) : b.substring(0, d) +c + a + b.substring(d));
            return b;
        };
        var rd = function (a, b) {
            if(b && b.action) {
                var c = a.target.get("linkerParam").split("=")[1];
                if ("get" == b.method.toLowerCase()) {
                    for (var d = b.childNodes ||[], e = 0; e < d.length; e++)
                        if ("_wa" == d[e].name) {
                            d[e].setAttribute("value", c);
                            return;
                        }
                    d = document.createElement("input");
                    d.setAttribute("type", "hidden");
                    d.setAttribute("name", "_wa");
                    d.setAttribute("value", c);
                    b.appendChild(d);
                } else "post" == b.method.toLowerCase() &&(b.action = qd(a, b.action));
            }
        };
        Dc.prototype.S = function (a, b, c) {
            function d(c) {
                try {
                    c = c || window.event;
                    var d;
                    t: {
                        var g = c.target || c.srcElement;
                        for (c = 100; g && 0 < c;) {
                            if (g.href && g.nodeName.match(/^a(?:rea)?$/i)) {
                                d = g;
                                break t;
                            }
                            g = g.parentNode;
                            c--;
                        }
                        d = {
                        };
                        }
                    ("http:" == d.protocol || "https:" == d.protocol) && sd(a, d.hostname || "") && d.href && setHref(d, qd(e, d.href, b));
                } catch (w) {
                    setMsgCode(26);
                }
            }
    
            var e = this;
            this.T || (this.T = true, addEvent(document, "mousedown", d, false), addEvent(document, "touchstart", d, false), addEvent(document, "keyup", d, false));
            if (c) {
                c = function (b) {
                    b = b || window.event;
                    if ((b = b.target || b.srcElement) && b.action) {
                        var c = b.action.match(od);
                        c && sd(a, c[1]) && rd(e, b);
                    }
                };
                for (var g = 0; g < document.forms.length; g++) addEvent(document.forms[g], "submit", c);
            }
            };
    
        function sd(a, b) {
            if(b == document.location.hostname) return false;
            for (var c = 0; c < a.length; c++)
                if (a[c]instanceof RegExp) {
                    if (a[c].test(b)) return true;
                } else if (0 <= b.indexOf(a[c])) return true;
            return false;
        };
    
        var wb = /^(UA|YT|MO|GP)-(d+)-(d+)$/;
        var pc = function (a) {
            function bind(a, b) {
                d.b.data.set(a, b);
            }
    
            function bindfilters(a, c) {
                bind(a, c);
                d.filters.add(a);
            }
    
    
            var d = this;
            this.b = new settings;
            this.filters = new Ha;
            bind(V, a[V]);
            bind(trackingId, removeBlank(a[trackingId]));
            bind(cookieName, a[cookieName]);
            bind(cookieDomain, a[cookieDomain]|| getHostname());
            bind(cookiePath, a[cookiePath]);
            bind(cookieExpires, a[cookieExpires]);
    
            bind(sampleRate, a[sampleRate]);
            bind(siteSpeedSampleRate, a[siteSpeedSampleRate]);
            bind(alwaysSendReferrer, a[alwaysSendReferrer]);
            bind(storage, a[storage]);
            bind(userId, a[userId]);
            bind(apiVersion, 1);
            bind(clientVersion, "j30");
            bindfilters(_oot, checkisDisabledTrack);
            bindfilters(previewTask, checkpreviewTask);
            bindfilters(checkProtocolTask, checkProtocol);
            bindfilters(validationTask, checkTrackidexist);
            bindfilters(checkStorageTask, checkStorage);
    
            bindfilters(samplerTask, checksampler);
            bindfilters(_rlt, Ta);
            bindfilters(ceTask, Hc);
    
            bindfilters(buildHitTask, buildHitTasks);
            bindfilters(sendHitTask, sendHitTasks);
            bindfilters(timingTask, sendTiming(this));
            Jc(this.b, a[clientId]);
            preCommRequestArgs(this.b);
    
            };
        var Jc = function (a, b) {
            if("cookie" == getStrConfig(a, storage)) {
                hc = false;
                var c;
                i: {
                    var d = getCookieValue(getStrConfig(a, cookieName));
                    if (d && !(1 > d.length)) {
                        c =[];
                        for (var e = 0; e < d.length; e++) {
                            var g;
                            g = d[e].split(".");
                            var ca = g.shift();
                            ("GA1" == ca || "1" == ca) && 1 < g.length ? (ca = g.shift().split("-"), 1 == ca.length && (ca[1] = "1"), ca[0]*= 1, ca[1]*= 1, g = {
                                    r: ca,
                                    s: g.join(".")
                                }): g = void 0;
                            g && c.push(g);
                        }
                        if (1 == c.length) {
                            setMsgCode(13);
                            c = c[0].s;
                            break i;
                        }
                        if (0 == c.length) setMsgCode(12);
                        else {
                            setMsgCode(14);
                            d = ic(getStrConfig(a, cookieDomain));
                            c = Gc(c, d, 0);
                            if (1 == c.length) {
                                c = c[0].s;
                                break i;
                            }
                            d = jc(getStrConfig(a, cookiePath));
                            c = Gc(c, d, 1);
                            c = c[0] && c[0].s;
                            break i;
                        }
                    }
                    c = void 0;
                    }
                c || (c = getStrConfig(a, cookieDomain), d = getStrConfig(a, legacyCookieDomain) || getHostname(), c = Xc("__utma", d, c), (c = void 0 == c ? void 0 : c.O[1] + "." + c.O[2]) && setMsgCode(10));
                c && (a.data.set(clientId, c), hc = true);
            }
    
            b && (setMsgCode(9), a.data.set(clientId, encodeUri(b)));
            a.get(clientId)
                || ((c =
                    (c = window.gaGlobal && window.gaGlobal.vid) && - 1 != c.search(/^(?:utma.)?d+.d+$/)
                    ? c : void 0) ? (setMsgCode(17), a.data.set(clientId, c)): (setMsgCode(8), a.data.set(clientId, Td())));
            mc(a);
        };
        //准备通用的请请求参数
        var preCommRequestArgs = function (a) {
    
            var b = window.navigator,
                c = window.screen,
                d = document.location;
            a.set(lb, getReferrer(a.get(alwaysSendReferrer)));
            if (d) {
                var e = d.pathname || "";
                "/" != e.charAt(0) &&(setMsgCode(31), e = "/" + e);
                a.set(kb, d.protocol + "//" + d.hostname +e + d.search);
            }
            c && a.set(qb, c.width + "x" + c.height);
            c && a.set(pb, c.colorDepth + "-bit");
            var c = document.documentElement,
                g = (e = document.body) && e.clientWidth && e.clientHeight,
                ca =[];
            c && c.clientWidth && c.clientHeight && ("CSS1Compat" === document.compatMode || !g) ? ca = [c.clientWidth, c.clientHeight]: g && (ca = [e.clientWidth, e.clientHeight]);
            c = 0 >= ca[0] || 0 >= ca[1] ? "" : ca.join("x");
            a.set(rb, c);
            a.set(tb, flashVersion());
            a.set(ob, document.characterSet || document.charset);
            a.set(sb, b && "function" === typeof b.javaEnabled && b.javaEnabled() || false);
            a.set(nb, (b && (b.language || b.browserLanguage) || "").toLowerCase());
    
        };
        pc.prototype.get = function (a) {
            return this.b.get(a);
        };
        pc.prototype.set = function (a, b) {
            this.b.set(a, b);
        };
        var qc = {
                pageview: [mb],
            event: [ub, xb, yb, zb],
                social: [Bb, Cb, Db],
                timing: [Mb, Nb, Pb, Ob]
            };
        pc.prototype.send = function (a) {
            if(!(1 > arguments.length)) {
                var b, c;
                if ("string" === typeof arguments[0]) {
                    (b = arguments[0], c =[].slice.call(arguments, 1));
                } else {
                    (b = arguments[0]&& arguments[0][hitType], c = arguments);
                }
                if (b) {
                    c = preParameters(qc[b]||[], c),
                        c[hitType]= b,
                        this.b.set(c, void 0, true),
                        this.filters.D(this.b),
                        this.b.data.m = { },
                        setMsgCode(44);
                }
            }
        };
        var onPageIsVisibility = function (funcrun) {
            if("prerender" == document.visibilityState) return false;
            funcrun();
            return true;
        };
        var td = /^(?:(w+).)?(?:(w+):)?(w+)$/;
        var sc = function (a) {
            if(isFunction(a[0])) this.u = a[0];
            else {
                var b = td.exec(a[0]);
                null != b && 4 == b.length && (this.c = b[1]
                    || "t0", this.e = b[2]
                    || "", this.d = b[3], this.a =[].slice.call(a, 1), this.e
                    || (this.A = "create" == this.d, this.i = "require" == this.d, this.g = "provide" == this.d, this.ba = "remove" == this.d), this.i && (3 <= this.a.length ? (this.X = this.a[1], this.W = this.a[2]): this.a[1]&& (isString(this.a[1]) ? this.X = this.a[1]: this.W = this.a[1])));
                b = a[1];
                a = a[2];
                if (!this.d) throw "abort";
                if (this.i && (!isString(b) || "" == b)) throw "abort";
                if (this.g && (!isString(b) || "" == b || !isFunction(a))) throw "abort";
                if (ud(this.c) || ud(this.e)) throw "abort";
                if (this.g && "t0" != this.c) throw "abort";
            }
        };
    
        function ud(a) {
            return 0 <= a.indexOf(".") || 0 <= a.indexOf(":");
        };
    
        var Yd;
        var Zd;
        var $d;
        Yd = new kVContainer;
        $d = new kVContainer;
        Zd = {
                ec: 45,
                ecommerce: 46,
                linkid: 47
            };
        var tc = function (a, b, c) {
            b == $ ? setMsgCode(35): b.get(V);
            var d = Yd.get(a);
            if (!isFunction(d)) return false;
            b.plugins_ = b.plugins_ || new kVContainer;
            if (b.plugins_.get(a)) return true;
            b.plugins_.set(a, new d(b, c || {
            }));
            return true;
        };
        var parseUrl = function (a) {
            function b(a) {
                var b = (a.hostname || "").split(":")[0].toLowerCase(),
                    c = (a.protocol || "").toLowerCase(),
                    c = 1 * a.port || ("http:" == c ? 80 : "https:" == c ? 443 : "");
                a = a.pathname || "";
                inString(a, "/") || (a = "/" + a);
                return [b, "" +c, a];
            }
    
            var c = document.createElement("a");
            setHref(c, document.location.href);
            var d = (c.protocol || "").toLowerCase(),
                e = b(c),
                g = c.search || "",
                ca = d + "//" + e[0] + (e[1] ? ":" + e[1] : "");
            inString(a, "//") ? a = d + a : inString(a, "/") ? a = ca + a : !a || inString(a, "?") ? a = ca + e[2] + (a || g) : 0 > a.split("/")[0].indexOf(":") &&(a = ca + e[2].substring(0, e[2].lastIndexOf("/")) + "/" + a);
            setHref(c, a);
            d = b(c);
            return {
                    protocol: (c.protocol || "").toLowerCase(),
                    host: d[0],
                    port: d[1],
                    path: d[2],
                    G: c.search || "",
                    url: a || ""
                };
            };
        var Z = {
                wa: function () {
                    Z.f =[];
                }
            };
        Z.wa();
        Z.D = function (a) {
            var b = Z.J.apply(Z, arguments),
                b = Z.f.concat(b);
            for (Z.f =[]; 0 < b.length && !Z.v(b[0]) && !(b.shift(), 0 < Z.f.length););
            Z.f = Z.f.concat(b);
        };
        Z.J = function (a) {
            for(var b = [], c = 0; c < arguments.length; c++)
                try {
                    var d = new sc(arguments[c]);
                    if (d.g) Yd.set(d.a[0], d.a[1]);
                    else {
                        if (d.i) {
                            var e = d,
                                g = e.a[0];
                            if (!isFunction(Yd.get(g)) && !$d.get(g)) {
                                Zd.hasOwnProperty(g) && setMsgCode(Zd[g]);
                                var ca = e.X;
                                !ca && Zd.hasOwnProperty(g) ?(setMsgCode(39), ca = g + ".js") : setMsgCode(43);
                                if (ca) {
    
                                    ca && 0 <= ca.indexOf("/") ||(ca = "/plugins/ua/" +ca);
                                    var l = parseUrl(ca);
                                    var e = void 0;
                                    var k = l.protocol;
                                    var w = document.location.protocol;
                                    e = "https:" == k || k == w ? true : "http:" != k ? false : "http:" == w;
                                    var xd;
                                    if (xd = e) {
                                        var e = l,
                                            be = parseUrl(document.location.href);
                                        if (e.G || 0 <= e.url.indexOf("?") || 0 <= e.path.indexOf("://")) xd = false;
                                        else if (e.host == be.host && e.port == be.port) xd = true;
                                        else {
                                            var ce = "http:" == e.protocol ? 80 : 443;
    
                                            xd = "localhost:25388" == e.host && (e.port || ce) == ce && inString(e.path, "/plugins/") ? true : false;
                                        }
                                    }
                                    xd && (createScript(l.url), $d.set(g, true));
                                }
                            }
                        }
                        b.push(d);
                    }
                } catch (de) {
                    //
                    throw de;
                }
            return b;
        };
        Z.v = function (a) {
            try {
                if (a.u) a.u.call(window, $.j("t0"));
                else {
                    var b = a.c == WXAnalyticsObjectName ? $: $.j(a.c);
                    if (a.A) "t0" == a.c && $.create.apply($, a.a);
                    else if (a.ba) $.remove(a.c);
                    else if (b)
                        if (a.i) {
                            if (!tc(a.a[0], b, a.W)) return true;
                        } else if (a.e) {
                            var c = a.d,
                                d = a.a,
                                e = b.plugins_.get(a.e);
                            e[c].apply(e, d);
                        } else b[a.d].apply(b, a.a);
                }
            } catch (g) {
                //
                throw g;
            }
        };
        var $ = function (a) {
            setMsgCode(1);
            Z.D.apply(Z, [arguments]);
        };
        $.h = { };
        $.P =[];
        $.L = 0;
        $.answer = 42;
        var uc = [trackingId, cookieDomain, V];
        $.create = function (a) {
            var b = preParameters(uc, [].slice.call(arguments));
            b[V]|| (b[V] = "t0");
            var c = "" + b[V];
            if ($.h[c]) return $.h[c];
            b = new pc(b);
            $.h[c]= b;
            $.P.push(b);
            return b;
        };
        $.remove = function (a) {
            for(var b = 0; b < $.P.length; b++)
                if ($.P[b].get(V) == a) {
                    $.P.splice(b, 1);
                    $.h[a]= null;
                    break;
                }
        };
        $.j = function (a) {
            return $.h[a];
        };
        $.K = function () {
            return $.P.slice(0);
        };
        $.N = function () {
            "wa" != WXAnalyticsObjectName && setMsgCode(49);
            var a = window[WXAnalyticsObjectName];
            if (!a || 42 != a.answer) {
                $.L = a && a.l;
                $.loaded = true;
                var b = window[WXAnalyticsObjectName]= $;
                createCommands("create", b, b.create, 3);
                createCommands("remove", b, b.remove);
                createCommands("getByName", b, b.j, 5);
                createCommands("getAll", b, b.K, 6);
                b = pc.prototype;
                createCommands("get", b, b.get, 7);
                createCommands("set", b, b.set, 4);
                createCommands("send", b, b.send, 2);
                b = settings.prototype;
                createCommands("get", b, b.get);
                createCommands("set", b, b.set);
                (window.waplugins = window.waplugins || { }).Linker = Dc;
                b = Dc.prototype;
                Yd.set("linker", Dc);
                createCommands("decorate", b, b.Q, 20);
                createCommands("autoLink", b, b.S, 25);
                //Yd.set("displayfeatures", fd);
                //Yd.set("adfeatures", Kd);
                a = a && a.q;
                if (isArray(a)) {
                    Z.D.apply($, a);
                } else {
                    setMsgCode(50);
                }
            }
        };
        //启动入口
        (function () {
            var a = $.N;
            if (!onPageIsVisibility(a)) {
                setMsgCode(16);
                var b = false;
                var c = function () {
                    !b && onPageIsVisibility(a) &&(b = true, removeEvent(document, "visibilitychange", c));
                };
                addEvent(document, "visibilitychange", c);
            }
        }) ();
    
        //这个是干什么的?我不知道。
        function La(a) {
            var b = 1,
                c = 0,
                d;
            if (a)
                for (b = 0, d = a.length -1; 0 <= d; d--) {
                    c = a.charCodeAt(d),
                        b = (b << 0x6 & 0xFFFFFFF) +c + (c << 14),
                        c = b & 0xFE00000,
                        b = 0 != c ? b ^ c >> 21 : b;
                }
            return b;
        };
        }) (window);

     

     

     

    最后说一下,谷歌代码编译工具。

     

    http://closure-compiler.appspot.com/home

     

    编译后,代码长度明显变短了。。。

  • 相关阅读:
    实时web应用方案——SignalR(.net core) 理论篇
    Performance Improvements in .NET Core 3.0
    在Asp.NET Core中如何管理用户机密数据
    NetCore 配置文件---直接读取及选项模式读取
    NetCore WebApi 及 搭建Swagger
    奇妙的 CSS MASK
    基于Docker安装并使用Elastic APM实现指标监控
    记录HBase手动删除Hadoop备份(archive)文件后,引发Hbase写入数据出错等一系列问题处理
    arm-linux-gcc 规定 char 为 unsigned char 导致程序运行出错
    linux下生成core dump文件方法及设置
  • 原文地址:https://www.cnblogs.com/zbw911/p/4081719.html
Copyright © 2011-2022 走看看