浏览代码

Perf: repalce aho-corasick w/ regexp

SukkaW 1 年之前
父节点
当前提交
ef1b80fb90

+ 1 - 1
Build/lib/get-phishing-domains.ts

@@ -7,7 +7,7 @@ import { appendArrayInPlaceCurried } from './append-array-in-place';
 import { DEBUG_DOMAIN_TO_FIND, PHISHING_DOMAIN_LISTS_EXTRA, PHISHING_HOSTS_EXTRA } from '../constants/reject-data-source';
 import { loosTldOptWithPrivateDomains } from '../constants/loose-tldts-opt';
 import picocolors from 'picocolors';
-import { createAhoCorasick as createKeywordFilter } from 'foxts/ahocorasick';
+import { createRetrieKeywordFilter as createKeywordFilter } from 'foxts/retrie';
 import { createCacheKey, deserializeArray, serializeArray } from './cache-filesystem';
 import { cache } from './fs-memo';
 import { isCI } from 'ci-info';

+ 2 - 2
Build/lib/rules/domainset.ts

@@ -1,5 +1,5 @@
 import { invariant } from 'foxts/guard';
-import { createAhoCorasick as createKeywordFilter } from 'foxts/ahocorasick';
+import { createRetrieKeywordFilter as createKeywordFilter } from 'foxts/retrie';
 import { RuleOutput } from './base';
 import type { SingboxSourceFormat } from '../singbox';
 
@@ -17,7 +17,7 @@ export class DomainsetOutput extends RuleOutput<string[]> {
   private $singbox_domains_suffixes: string[] = ['this_ruleset_is_made_by_sukkaw.ruleset.skk.moe'];
   private $adguardhome: string[] = [];
   preprocess() {
-    const kwfilter = createKeywordFilter(this.domainKeywords);
+    const kwfilter = createKeywordFilter(Array.from(this.domainKeywords));
 
     this.domainTrie.dumpWithoutDot((domain, subdomain) => {
       if (kwfilter(domain)) {

+ 2 - 2
Build/lib/rules/ruleset.ts

@@ -1,6 +1,6 @@
 import { merge } from 'fast-cidr-tools';
 import type { Span } from '../../trace';
-import { createAhoCorasick as createKeywordFilter } from 'foxts/ahocorasick';
+import { createRetrieKeywordFilter as createKeywordFilter } from 'foxts/retrie';
 import { appendArrayInPlace } from '../append-array-in-place';
 import { appendSetElementsToArray } from 'foxts/append-set-elements-to-array';
 import type { SingboxSourceFormat } from '../singbox';
@@ -17,7 +17,7 @@ export class RulesetOutput extends RuleOutput<Preprocessed> {
   }
 
   protected preprocess() {
-    const kwfilter = createKeywordFilter(this.domainKeywords);
+    const kwfilter = createKeywordFilter(Array.from(this.domainKeywords));
 
     const domains: string[] = [];
     const domainSuffixes: string[] = [];

+ 1 - 1
Build/validate-domain-alive.ts

@@ -10,7 +10,7 @@ import { newQueue } from '@henrygd/queue';
 import asyncRetry from 'async-retry';
 import * as whoiser from 'whoiser';
 import picocolors from 'picocolors';
-import { createAhoCorasick as createKeywordFilter } from 'foxts/ahocorasick';
+import { createRetrieKeywordFilter as createKeywordFilter } from 'foxts/retrie';
 import './lib/fetch-retry';
 
 const dohServers: Array<[string, DNS2.DnsResolver]> = ([

+ 2 - 2
Build/validate-gfwlist.ts

@@ -7,7 +7,7 @@ import { readFileByLine } from './lib/fetch-text-by-line';
 import path from 'node:path';
 import { OUTPUT_SURGE_DIR } from './constants/dir';
 import { $fetch } from './lib/make-fetch-happen';
-import { createAhoCorasick as createKeywordFilter } from 'foxts/ahocorasick';
+import { createRetrieKeywordFilter as createKeywordFilter } from 'foxts/retrie';
 
 export async function parseGfwList() {
   const whiteSet = new Set<string>();
@@ -117,7 +117,7 @@ export async function parseGfwList() {
 
   whiteSet.forEach(domain => trie.whitelist(domain));
 
-  const kwfilter = createKeywordFilter(keywordSet);
+  const kwfilter = createKeywordFilter([...keywordSet]);
 
   const missingTop10000Gfwed = new Set<string>();
 

+ 1 - 1
package.json

@@ -31,7 +31,7 @@
     "fast-cidr-tools": "^0.3.1",
     "fast-fifo": "^1.3.2",
     "fdir": "^6.4.2",
-    "foxts": "^1.0.13",
+    "foxts": "^1.1.3",
     "hash-wasm": "^4.12.0",
     "json-stringify-pretty-compact": "^3.0.0",
     "make-fetch-happen": "^14.0.3",

+ 5 - 5
pnpm-lock.yaml

@@ -45,8 +45,8 @@ importers:
         specifier: ^6.4.2
         version: 6.4.2(picomatch@4.0.2)
       foxts:
-        specifier: ^1.0.13
-        version: 1.0.13
+        specifier: ^1.1.3
+        version: 1.1.3
       hash-wasm:
         specifier: ^4.12.0
         version: 4.12.0
@@ -1145,8 +1145,8 @@ packages:
     resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==}
     engines: {node: '>= 6'}
 
-  foxts@1.0.13:
-    resolution: {integrity: sha512-OTxteinRnc7hZ8NbcPH5gOji/D2JmSEoYEVzCZ08YEb1T7zudsK/+Kp4wUkBjBBvcjvWnxOv4EILBsbwnddMAg==}
+  foxts@1.1.3:
+    resolution: {integrity: sha512-xF599E5aoxmBBN1Q+CJjlJdQndkjcw2Drc59qfQmSWR/0mOVI2zK+zEIb1lvq6wdRZZHAdrI/x+kfRvjF+lpHQ==}
 
   fs-constants@1.0.0:
     resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
@@ -3030,7 +3030,7 @@ snapshots:
       combined-stream: 1.0.8
       mime-types: 2.1.35
 
-  foxts@1.0.13: {}
+  foxts@1.1.3: {}
 
   fs-constants@1.0.0: {}