From 939a119a528386be98b059ce0b6df65fb75bce0b Mon Sep 17 00:00:00 2001 From: SukkaW Date: Sun, 21 Aug 2022 20:57:01 +0800 Subject: [PATCH] Perf: improve reject set dedupe performance --- Build/worker/build-reject-domainset-worker.js | 30 +++++++++++++++---- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/Build/worker/build-reject-domainset-worker.js b/Build/worker/build-reject-domainset-worker.js index 38ac4ecd..ca009129 100644 --- a/Build/worker/build-reject-domainset-worker.js +++ b/Build/worker/build-reject-domainset-worker.js @@ -6,15 +6,33 @@ exports.dedupe = ({ chunk }) => { for (let i = 0, l = chunk.length; i < l; i++) { const domainFromInput = chunk[i]; for (const domainFromFullSet of workerData) { + if (outputToBeRemoved.has(domainFromFullSet)) continue; if (domainFromFullSet === domainFromInput) continue; if (domainFromFullSet.charAt(0) !== '.') continue; + // domainFromFullSet is now startsWith a "." - if ( - (domainFromInput.charAt(0) !== '.' && `.${domainFromInput}` === domainFromFullSet) - || domainFromInput.endsWith(domainFromFullSet) - ) { - outputToBeRemoved.add(domainFromInput); - break; + if (domainFromInput.charAt(0) !== '.') { + let shouldBeRemoved = true; + + for (let j = 0, l2 = domainFromInput.length; j < l2; j++) { + if (domainFromFullSet.charAt(j + 1) !== domainFromInput.charAt(j)) { + shouldBeRemoved = false; + break; + } + } + + if (shouldBeRemoved) { + outputToBeRemoved.add(domainFromInput); + break; + } + } + // domainFromInput is now startsWith a "." + + if (domainFromInput.length >= domainFromFullSet.length) { + if (domainFromInput.endsWith(domainFromFullSet)) { + outputToBeRemoved.add(domainFromInput); + break; + } } } }