From 0650c8dbabab8703b12e4ef2af30c6c305a2ee85 Mon Sep 17 00:00:00 2001 From: Sam Date: Fri, 30 Jun 2017 15:19:07 -0400 Subject: [PATCH] optimize rule lookup we have tons of bbcode rules, might as well speed them up --- .../engines/discourse-markdown-it.js.es6 | 16 ++++++++++++++++ .../engines/markdown-it/bbcode-block.js.es6 | 16 ++++------------ .../engines/markdown-it/bbcode-inline.js.es6 | 14 +++----------- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/app/assets/javascripts/pretty-text/engines/discourse-markdown-it.js.es6 b/app/assets/javascripts/pretty-text/engines/discourse-markdown-it.js.es6 index e714f7ed5f6..3d3ebfa6fc6 100644 --- a/app/assets/javascripts/pretty-text/engines/discourse-markdown-it.js.es6 +++ b/app/assets/javascripts/pretty-text/engines/discourse-markdown-it.js.es6 @@ -48,8 +48,24 @@ class Ruler { return this.rules; } + getRuleForTag(tag) { + this.ensureCache(); + return this.cache[tag]; + } + + ensureCache() { + if (this.cache) { return; } + + this.cache = {}; + for(let i=this.rules.length-1;i>=0;i--) { + let info = this.rules[i]; + this.cache[info.rule.tag] = info; + } + } + push(name, rule) { this.rules.push({name, rule}); + this.cache = null; } } diff --git a/app/assets/javascripts/pretty-text/engines/markdown-it/bbcode-block.js.es6 b/app/assets/javascripts/pretty-text/engines/markdown-it/bbcode-block.js.es6 index 40fa118a3d4..51050f9206d 100644 --- a/app/assets/javascripts/pretty-text/engines/markdown-it/bbcode-block.js.es6 +++ b/app/assets/javascripts/pretty-text/engines/markdown-it/bbcode-block.js.es6 @@ -111,7 +111,7 @@ export function parseBBCodeTag(src, start, max, multiline) { function applyBBCode(state, startLine, endLine, silent, md) { - var i, nextLine, + var nextLine, old_parent, old_line_max, rule, start = state.bMarks[startLine] + state.tShift[startLine], initial = start, @@ -126,18 +126,10 @@ function applyBBCode(state, startLine, endLine, silent, md) { return false; } - let rules = md.block.bbcode_ruler.getRules(); + let ruleInfo = md.block.bbcode_ruler.getRuleForTag(info.tag); + if (!ruleInfo) { return false; } - for(i=0;i