From 7ab4487020f52cf3238ecc94957d6420d16f3e69 Mon Sep 17 00:00:00 2001 From: Nicolas Stepien Date: Tue, 6 Mar 2012 23:21:27 +0100 Subject: [PATCH] Main.preParser performance optimization. Use getElementsByClassName for "quotelink" and "backlink". querySelectorAll was slower, and Array.prototype.slice was an overkill. This speeds up the preParser by about 35%. --- 4chan_x.user.js | 22 ++++++++++++++++------ script.coffee | 12 ++++++++---- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/4chan_x.user.js b/4chan_x.user.js index 8fb3c2153..9fdfa2328 100644 --- a/4chan_x.user.js +++ b/4chan_x.user.js @@ -3163,14 +3163,19 @@ return g.callbacks.push(this.node); }, node: function(post) { - var quote, _i, _len, _ref; - _ref = post.quotes.concat(post.backlinks); + var quote, _i, _j, _len, _len2, _ref, _ref2; + _ref = post.quotes; for (_i = 0, _len = _ref.length; _i < _len; _i++) { quote = _ref[_i]; if (!quote.hash) continue; quote.removeAttribute('onclick'); $.on(quote, 'click', QuoteInline.toggle); } + _ref2 = post.backlinks; + for (_j = 0, _len2 = _ref2.length; _j < _len2; _j++) { + quote = _ref2[_j]; + $.on(quote, 'click', QuoteInline.toggle); + } }, toggle: function(e) { var id; @@ -3289,12 +3294,17 @@ return g.callbacks.push(this.node); }, node: function(post) { - var quote, _i, _len, _ref; - _ref = post.quotes.concat(post.backlinks); + var quote, _i, _j, _len, _len2, _ref, _ref2; + _ref = post.quotes; for (_i = 0, _len = _ref.length; _i < _len; _i++) { quote = _ref[_i]; if (quote.hash) $.on(quote, 'mouseover', QuotePreview.mouseover); } + _ref2 = post.backlinks; + for (_j = 0, _len2 = _ref2.length; _j < _len2; _j++) { + quote = _ref2[_j]; + $.on(quote, 'mouseover', QuotePreview.mouseover); + } }, mouseover: function(e) { var el, id, qp, quote, replyID, threadID, _i, _len, _ref; @@ -3988,8 +3998,8 @@ isInlined: /\binline\b/.test(klass), filesize: $('.filesize', node), img: $('img[md5]', node), - quotes: $$('.quotelink', node), - backlinks: $$('.backlink', node) + quotes: node.getElementsByClassName('quotelink'), + backlinks: node.getElementsByClassName('backlink') }; }, node: function(nodes, notify) { diff --git a/script.coffee b/script.coffee index 89bba420a..cae6ca284 100644 --- a/script.coffee +++ b/script.coffee @@ -2620,10 +2620,12 @@ QuoteInline = init: -> g.callbacks.push @node node: (post) -> - for quote in post.quotes.concat post.backlinks + for quote in post.quotes continue unless quote.hash quote.removeAttribute 'onclick' $.on quote, 'click', QuoteInline.toggle + for quote in post.backlinks + $.on quote, 'click', QuoteInline.toggle return toggle: (e) -> return if e.shiftKey or e.altKey or e.ctrlKey or e.metaKey or e.button isnt 0 @@ -2712,8 +2714,10 @@ QuotePreview = init: -> g.callbacks.push @node node: (post) -> - for quote in post.quotes.concat post.backlinks + for quote in post.quotes $.on quote, 'mouseover', QuotePreview.mouseover if quote.hash + for quote in post.backlinks + $.on quote, 'mouseover', QuotePreview.mouseover return mouseover: (e) -> return if /\binlined\b/.test @className @@ -3324,8 +3328,8 @@ Main = isInlined: /\binline\b/.test klass filesize: $ '.filesize', node img: $ 'img[md5]', node - quotes: $$ '.quotelink', node - backlinks: $$ '.backlink', node + quotes: node.getElementsByClassName 'quotelink' + backlinks: node.getElementsByClassName 'backlink' node: (nodes, notify) -> for callback in g.callbacks try