2015-05-06 4 views
0

Я использую 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, {}))

+2

Где вы получили сценарий? Вероятно, было бы полезно предоставить исходную распакованную версию, если вы хотите оптимизировать работу; http://matthewfl.com/unPacker.html –

ответ

0

Так вот распакованы версия кода.

Функция getFirstCommentNumber является рекурсивным вызовом на всех дочерних узлах параметра, который она получает, и функция commentLink вызывает это с использованием document.body. В основном вы просматриваете всю структуру DOM, ища номер комментария.

Есть ли лучший узел DOM, который содержит только комментарии, которые можно передать внутри commentLink в вызов getFirstCommentNumber?

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

+0

http://www.hark.com/clips/ngfjbyyvbn-i-have-no-clue-what-youre-talking-about – user4843525

+0

@ user4843525, тогда у вас не будет любой реальный шанс оптимизировать код –

Смежные вопросы