From 88fffadceb35156070e7bb2ddee2debe5035b4f3 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Wed, 30 Jun 2021 18:38:39 +0200 Subject: [PATCH] add cache for the selector parser --- src/jit/lib/optimizeUniversalRules.js | 30 ++++++++++++++++----------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/src/jit/lib/optimizeUniversalRules.js b/src/jit/lib/optimizeUniversalRules.js index 53ba65134..91c3a2f3e 100644 --- a/src/jit/lib/optimizeUniversalRules.js +++ b/src/jit/lib/optimizeUniversalRules.js @@ -1,19 +1,24 @@ import selectorParser from 'postcss-selector-parser' let elementSelectorParser = selectorParser((selectors) => { - return selectors - .map((s) => { - return s - .split((n) => n.type === 'combinator') - .pop() - .filter((n) => n.type !== 'pseudo' || n.value.startsWith('::')) - .join('') - }) - .join(', ') + return selectors.map((s) => { + return s + .split((n) => n.type === 'combinator') + .pop() + .filter((n) => n.type !== 'pseudo' || n.value.startsWith('::')) + .join('') + .trim() + }) }) +let cache = new Map() + function extractElementSelector(selector) { - return elementSelectorParser.transformSync(selector) + if (!cache.has(selector)) { + cache.set(selector, elementSelectorParser.transformSync(selector)) + } + + return cache.get(selector) } export default function collapseAdjacentRules() { @@ -56,8 +61,9 @@ export default function collapseAdjacentRules() { let variable = decl.prop for (let node of variableNodeMap.get(variable) ?? []) { - let elementSelector = extractElementSelector(node.selector) - selectors.add(extractElementSelector(node.selector)) + for (let selector of extractElementSelector(node.selector)) { + selectors.add(selector) + } } })