ソースを参照

Perf: avoid iterate domainSets twice

SukkaW 1 年間 前
コミット
26a4d72b06
1 ファイル変更17 行追加12 行削除
  1. 17 12
      Build/build-reject-domainset.ts

+ 17 - 12
Build/build-reject-domainset.ts

@@ -111,32 +111,37 @@ export const buildRejectDomainSet = task(import.meta.main, import.meta.path)(asy
     return domainKeywordsSet;
     return domainKeywordsSet;
   });
   });
 
 
-  const [baseTrie, extraTrie] = span.traceChildSync('create smol trie while deduping black keywords', () => {
+  const [baseTrie, extraTrie] = span.traceChildSync('create smol trie while deduping black keywords', (childSpan) => {
     const baseTrie = createTrie(null, true, true);
     const baseTrie = createTrie(null, true, true);
     const extraTrie = createTrie(null, true, true);
     const extraTrie = createTrie(null, true, true);
 
 
     const kwfilter = createKeywordFilter(domainKeywordsSet);
     const kwfilter = createKeywordFilter(domainKeywordsSet);
 
 
-    for (const domain of domainSets) {
-      // exclude keyword when creating trie
-      if (!kwfilter(domain)) {
-        baseTrie.add(domain);
+    childSpan.traceChildSync('add items to trie (extra)', () => {
+      for (const domain of domainSetsExtra) {
+        // exclude keyword when creating trie
+        if (!kwfilter(domain)) {
+          extraTrie.add(domain);
+        }
       }
       }
-    }
+    });
+
+    childSpan.traceChildSync('add items to trie (base) + dedupe extra trie', () => {
+      for (const domain of domainSets) {
+        // exclude keyword when creating trie
+        if (!kwfilter(domain)) {
+          baseTrie.add(domain);
 
 
-    for (const domain of domainSetsExtra) {
-      // exclude keyword when creating trie
-      if (!kwfilter(domain)) {
-        extraTrie.add(domain);
+          extraTrie.whitelist(domain);
+        }
       }
       }
-    }
+    });
 
 
     return [baseTrie, extraTrie] as const;
     return [baseTrie, extraTrie] as const;
   });
   });
 
 
   span.traceChildSync('dedupe from white suffixes (base)', () => filterRuleWhitelistDomainSets.forEach(baseTrie.whitelist));
   span.traceChildSync('dedupe from white suffixes (base)', () => filterRuleWhitelistDomainSets.forEach(baseTrie.whitelist));
   span.traceChildSync('dedupe from white suffixes and base (extra)', () => {
   span.traceChildSync('dedupe from white suffixes and base (extra)', () => {
-    domainSets.forEach(extraTrie.whitelist);
     filterRuleWhitelistDomainSets.forEach(extraTrie.whitelist);
     filterRuleWhitelistDomainSets.forEach(extraTrie.whitelist);
   });
   });