如何加速脚本?

时间:2015-05-06 21:39:25

标签: javascript performance drupal drupal-6

我正在使用drupal,我得到了这个脚本来查找评论。如果你知道drupal然后你知道臭名昭着的问题,如果你点击评论的链接并且评论不在第1页,那么你将无法到达任何地方。该脚本通过查找评论并将您带到正确的页面来解决这个问题,但是主要是它很慢..我的问题:有什么方法可以加快它的速度吗?

eval(function(p, a, c, k, e, r) {
    e = function(c) {
        return (c < a ? '' : e(parseInt(c / a))) + ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36))
    };
    if (!''.replace(/^/, String)) {
        while (c--) r[e(c)] = k[c] || e(c);
        k = [
            function(e) {
                return r[e]
            }
        ];
        e = function() {
            return '\\w+'
        };
        c = 1
    };
    while (c--)
        if (k[c]) p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]);
    return p
}('(6(){r(D,"E",6(){s();2 a=9.F("a");k(2 i=0;i<a.l;i++){2 b=a[i];3(/#g-\\d/.m(b.7))b.7=b.7.t("#",(/\\?/.m(b.7)?"&":"?")+"G=1#")}});6 r(a,b,c){u{a.H(b,c,I)}v(w){u{a.J("K"+b,c)}v(w){}}}6 s(){3(!/#g-\\d+$/.m(5.o))4;2 a;3(a=9.x(5.o.h(1)))4;2 b=5.L.h(1).y("&");j("z",b);2 c=+j("A",b);3(c&&9.x("g-"+c))4;2 d=+j("B",b);3(d>=M)4;2 e=p(9.N);3(e){2 f=5.7.O(/.*?(?=\\?|#|$)/)+"?B="+(d+1)+"&A="+e+(b+""?"&"+b.P("&"):"")+5.o;3(c)5.t(f);Q 5=f}}6 p(a){k(2 b R a.C){2 c=a.C[b];3(c.q&&c.q.h(0,8)==="g-")4+c.q.h(8);2 n=p(c);3(n)4 n}}6 j(a,b){k(2 i=0;i<b.l;i++){2 c=b[i].y("=");3(c[0]===a){b.S(i,1);4(c.l>=1)?c[1]:""}}4""}}());', 55, 55, '||var|if|return|location|function|href||document|||||||comment|substr||removeSearchValue|for|length|test||hash|getFirstCommentNumber|id|addEvent|commentLink|replace|try|catch|ignore|getElementById|split||cs|page|childNodes|window|load|getElementsByTagName|cl|addEventListener|false|attachEvent|on|search|99|body|match|join|else|in|splice'.split('|'), 0, {}))

1 个答案:

答案 0 :(得分:0)

所以这是代码的解压缩版本。

函数getFirstCommentNumber是递归的,在它收到的参数的所有子节点上调用它自己,函数commentLink使用document.body调用它。基本上,您正在遍历整个DOM结构,以查找注释编号。

是否有更好的DOM节点只包含您可以在commentLink内部传递给getFirstCommentNumber来电的评论?

(function () {
	addEvent(window, "load", function () {
		commentLink();
		var a = document.getElementsByTagName("a");
		for (var i = 0;
			i < a.length;
			i++) {
			var b = a[i];
			if (/#comment-\d/.test(b.href))
				b.href = b.href.replace("#", (/\?/.test(b.href) ? "&" : "?") + "cl=1#")
		}
	});
	function addEvent(a, b, c) {
		try {
			a.addEventListener(b, c, false)
		} catch (ignore) {
			try {
				a.attachEvent("on" + b, c)
			} catch (ignore) {}
		}
	}
	function commentLink() {
		if (!/#comment-\d+$/.test(location.hash))
			return;
		var a;
		if (a = document.getElementById(location.hash.substr(1)))
			return;
		var b = location.search.substr(1).split("&");
		removeSearchValue("z", b);
		var c = +removeSearchValue("cs", b);
		if (c && document.getElementById("comment-" + c))
			return;
		var d = +removeSearchValue("page", b);
		if (d >= 99)
			return;
		var e = getFirstCommentNumber(document.body);
		if (e) {
			var f = location.href.match(/.*?(?=\?|#|$)/) + "?page=" + (d + 1) + "&cs=" + e + (b + "" ? "&" + b.join("&") : "") + location.hash;
			if (c)
				location.replace(f);
			else
				location = f
		}
	}
	function getFirstCommentNumber(a) {
		for (var b in a.childNodes) {
			var c = a.childNodes[b];
			if (c.id && c.id.substr(0, 8) === "comment-")
				return +c.id.substr(8);
			var n = getFirstCommentNumber(c);
			if (n)
				return n
		}
	}
	function removeSearchValue(a, b) {
		for (var i = 0;
			i < b.length;
			i++) {
			var c = b[i].split("=");
			if (c[0] === a) {
				b.splice(i, 1);
				return (c.length >= 1) ? c[1] : ""
			}
		}
		return ""
	}
}
	());