ソースを参照

Chore: faster reject domainset builder

SukkaW 3 年 前
コミット
ed3ba14e0e

+ 2 - 1
Build/build-reject-domainset.js

@@ -71,7 +71,8 @@ const threads = require('os').cpus().length - 1;
     'heapanalytics.com',
     'segment.com',
     'segmentify.com',
-    't.co' // pgl yoyo add t.co to the blacklist
+    't.co', // pgl yoyo add t.co to the blacklist
+    'survicate.com' // AdGuardDNSFilter
   ]);
 
   (await Promise.all([

+ 15 - 10
Build/lib/parse-filter.js

@@ -84,28 +84,33 @@ async function processFilterRules(filterRulesUrl) {
   const filterRules = (await (await fetch(filterRulesUrl)).text()).split('\n').map(line => line.trim());
 
   filterRules.forEach(line => {
+    const lineStartsWithDoubleVerticalBar = line.startsWith('||');
+
     if (
       line === ''
       || line.includes('#')
       || line.includes('!')
       || line.includes('*')
       || line.includes('/')
-      || line.includes('$') && !line.startsWith('||')
-      || line.trim() === ''
+      || line.includes('$') && !lineStartsWithDoubleVerticalBar
+      || line === ''
       || isIP(line) !== 0
     ) {
       return;
     }
 
-    if (line.startsWith('||') && line.endsWith('^$badfilter')) {
+    const lineEndsWithCaret = line.endsWith('^');
+    const lineEndsWithCaretVerticalBar = line.endsWith('^|');
+
+    if (lineStartsWithDoubleVerticalBar && line.endsWith('^$badfilter')) {
       const domain = line.replace('||', '').replace('^$badfilter', '').trim();
       if (rDomain.test(domain)) {
         whitelistDomainSets.add(domain);
       }
     } else if (line.startsWith('@@||')
       && (
-        line.endsWith('^')
-        || line.endsWith('^|')
+        lineEndsWithCaret
+        || lineEndsWithCaretVerticalBar
         || line.endsWith('^$badfilter')
         || line.endsWith('^$1p')
       )
@@ -121,10 +126,10 @@ async function processFilterRules(filterRulesUrl) {
         whitelistDomainSets.add(domain);
       }
     } else if (
-      line.startsWith('||')
+      lineStartsWithDoubleVerticalBar
       && (
-        line.endsWith('^')
-        || line.endsWith('^|')
+        lineEndsWithCaret
+        || lineEndsWithCaretVerticalBar
         || line.endsWith('^$all')
       )
     ) {
@@ -139,8 +144,8 @@ async function processFilterRules(filterRulesUrl) {
       }
     } else if (line.startsWith('://')
       && (
-        line.endsWith('^')
-        || line.endsWith('^|')
+        lineEndsWithCaret
+        || lineEndsWithCaretVerticalBar
       )
     ) {
       const domain = `${line.replaceAll('://', '').replaceAll('^|', '').replaceAll('^', '')}`.trim();

+ 4 - 3
Build/worker/build-reject-domainset-worker.js

@@ -3,14 +3,15 @@ const { workerData } = require('piscina');
 exports.dedupe = ({ chunk }) => {
   const outputToBeRemoved = new Set();
 
-  for (const domainFromInput of chunk) {
+  for (let i = 0, l = chunk.length; i < l; i++) {
+    const domainFromInput = chunk[i];
     for (const domainFromFullSet of workerData) {
       if (domainFromFullSet === domainFromInput) continue;
       if (domainFromFullSet.charAt(0) !== '.') continue;
 
       if (
-        `.${domainFromInput}` === domainFromFullSet
-        || domainFromInput.endsWith(domainFromFullSet)
+        // `.${domainFromInput}` === domainFromFullSet
+        domainFromInput.endsWith(domainFromFullSet)
       ) {
         outputToBeRemoved.add(domainFromInput);
         break;