瀏覽代碼

Perf: improve speedtest hosts

SukkaW 1 年之前
父節點
當前提交
2d9c401219
共有 1 個文件被更改,包括 96 次插入94 次删除
  1. 96 94
      Build/build-speedtest-domainset.ts

+ 96 - 94
Build/build-speedtest-domainset.ts

@@ -13,7 +13,7 @@ import { readFileIntoProcessedArray } from './lib/fetch-text-by-line';
 import { TTL, deserializeArray, fsFetchCache, serializeArray } from './lib/cache-filesystem';
 import { createMemoizedPromise } from './lib/memo-promise';
 
-import { setAddFromArrayCurried } from './lib/set-add-from-array';
+import { createTrie } from './lib/trie';
 
 const s = new Sema(2);
 
@@ -90,101 +90,103 @@ const getPreviousSpeedtestDomainsPromise = createMemoizedPromise(async () => {
 });
 
 export const buildSpeedtestDomainSet = task(import.meta.main, import.meta.path)(async (span) => {
-  // Predefined domainset
-  /** @type {Set<string>} */
-  const domains = new Set<string>([
-    // speedtest.net
-    '.speedtest.net',
-    '.speedtestcustom.com',
-    '.ooklaserver.net',
-    '.speed.misaka.one',
-    '.speedtest.rt.ru',
-    '.speedtest.aptg.com.tw',
-    '.speedtest.gslnetworks.com',
-    '.speedtest.jsinfo.net',
-    '.speedtest.i3d.net',
-    '.speedtestkorea.com',
-    '.speedtest.telus.com',
-    '.speedtest.telstra.net',
-    '.speedtest.clouvider.net',
-    '.speedtest.idv.tw',
-    '.speedtest.frontier.com',
-    '.speedtest.orange.fr',
-    '.speedtest.centurylink.net',
-    '.srvr.bell.ca',
-    '.speedtest.contabo.net',
-    'speedtest.hk.chinamobile.com',
-    'speedtestbb.hk.chinamobile.com',
-    '.hizinitestet.com',
-    '.linknetspeedtest.net.br',
-    'speedtest.rit.edu',
-    'speedtest.ropa.de',
-    'speedtest.sits.su',
-    'speedtest.tigo.cr',
-    'speedtest.upp.com',
-    '.speedtest.pni.tw',
-    '.speed.pfm.gg',
-    '.speedtest.faelix.net',
-    '.speedtest.labixe.net',
-    '.speedtest.warian.net',
-    '.speedtest.starhub.com',
-    '.speedtest.gibir.net.tr',
-    '.speedtest.ozarksgo.net',
-    '.speedtest.exetel.com.au',
-    '.speedtest.sbcglobal.net',
-    '.speedtest.leaptel.com.au',
-    '.speedtest.windstream.net',
-    '.speedtest.vodafone.com.au',
-    '.speedtest.rascom.ru',
-    '.speedtest.dchost.com',
-    '.speedtest.highnet.com',
-    '.speedtest.seattle.wa.limewave.net',
-    '.speedtest.optitel.com.au',
-    '.speednet.net.tr',
-    '.speedtest.angolacables.co.ao',
-    '.ookla-speedtest.fsr.com',
-    '.speedtest.comnet.com.tr',
-    '.speedtest.gslnetworks.com.au',
-    '.test.gslnetworks.com.au',
-    '.speedtest.gslnetworks.com',
-    '.speedtestunonet.com.br',
-    '.speedtest.alagas.net',
-    'speedtest.surfshark.com',
-    '.speedtest.aarnet.net.au',
-    '.ookla.rcp.net',
-    '.ookla-speedtests.e2ro.com',
-    '.speedtest.com.sg',
-    '.ookla.ddnsgeek.com',
-    '.speedtest.pni.tw',
-    // Cloudflare
-    '.speed.cloudflare.com',
-    // Wi-Fi Man
-    '.wifiman.com',
-    '.wifiman.me',
-    '.wifiman.ubncloud.com',
-    // Fast.com
-    '.fast.com',
-    // MacPaw
-    'speedtest.macpaw.com',
-    // speedtestmaster
-    '.netspeedtestmaster.com',
-    // Google Search Result of "speedtest", powered by this
-    '.measurement-lab.org',
-    '.measurementlab.net',
-    // Google Fiber legacy speedtest site (new fiber speedtest use speedtestcustom.com)
-    '.speed.googlefiber.net',
-    // librespeed
-    '.backend.librespeed.org',
-    // Apple,
-    'mensura.cdn-apple.com', // From netQuality command
-    // OpenSpeedtest
-    'open.cachefly.net'
-  ]);
+  const domainTrie = createTrie(
+    [
+      // speedtest.net
+      '.speedtest.net',
+      '.speedtestcustom.com',
+      '.ooklaserver.net',
+      '.speed.misaka.one',
+      '.speedtest.rt.ru',
+      '.speedtest.aptg.com.tw',
+      '.speedtest.gslnetworks.com',
+      '.speedtest.jsinfo.net',
+      '.speedtest.i3d.net',
+      '.speedtestkorea.com',
+      '.speedtest.telus.com',
+      '.speedtest.telstra.net',
+      '.speedtest.clouvider.net',
+      '.speedtest.idv.tw',
+      '.speedtest.frontier.com',
+      '.speedtest.orange.fr',
+      '.speedtest.centurylink.net',
+      '.srvr.bell.ca',
+      '.speedtest.contabo.net',
+      'speedtest.hk.chinamobile.com',
+      'speedtestbb.hk.chinamobile.com',
+      '.hizinitestet.com',
+      '.linknetspeedtest.net.br',
+      'speedtest.rit.edu',
+      'speedtest.ropa.de',
+      'speedtest.sits.su',
+      'speedtest.tigo.cr',
+      'speedtest.upp.com',
+      '.speedtest.pni.tw',
+      '.speed.pfm.gg',
+      '.speedtest.faelix.net',
+      '.speedtest.labixe.net',
+      '.speedtest.warian.net',
+      '.speedtest.starhub.com',
+      '.speedtest.gibir.net.tr',
+      '.speedtest.ozarksgo.net',
+      '.speedtest.exetel.com.au',
+      '.speedtest.sbcglobal.net',
+      '.speedtest.leaptel.com.au',
+      '.speedtest.windstream.net',
+      '.speedtest.vodafone.com.au',
+      '.speedtest.rascom.ru',
+      '.speedtest.dchost.com',
+      '.speedtest.highnet.com',
+      '.speedtest.seattle.wa.limewave.net',
+      '.speedtest.optitel.com.au',
+      '.speednet.net.tr',
+      '.speedtest.angolacables.co.ao',
+      '.ookla-speedtest.fsr.com',
+      '.speedtest.comnet.com.tr',
+      '.speedtest.gslnetworks.com.au',
+      '.test.gslnetworks.com.au',
+      '.speedtest.gslnetworks.com',
+      '.speedtestunonet.com.br',
+      '.speedtest.alagas.net',
+      'speedtest.surfshark.com',
+      '.speedtest.aarnet.net.au',
+      '.ookla.rcp.net',
+      '.ookla-speedtests.e2ro.com',
+      '.speedtest.com.sg',
+      '.ookla.ddnsgeek.com',
+      '.speedtest.pni.tw',
+      // Cloudflare
+      '.speed.cloudflare.com',
+      // Wi-Fi Man
+      '.wifiman.com',
+      '.wifiman.me',
+      '.wifiman.ubncloud.com',
+      // Fast.com
+      '.fast.com',
+      // MacPaw
+      'speedtest.macpaw.com',
+      // speedtestmaster
+      '.netspeedtestmaster.com',
+      // Google Search Result of "speedtest", powered by this
+      '.measurement-lab.org',
+      '.measurementlab.net',
+      // Google Fiber legacy speedtest site (new fiber speedtest use speedtestcustom.com)
+      '.speed.googlefiber.net',
+      // librespeed
+      '.backend.librespeed.org',
+      // Apple,
+      'mensura.cdn-apple.com', // From netQuality command
+      // OpenSpeedtest
+      'open.cachefly.net'
+    ],
+    true,
+    true
+  );
 
   await span.traceChildAsync(
     'fetch previous speedtest domainset',
     () => getPreviousSpeedtestDomainsPromise()
-      .then(setAddFromArrayCurried(domains))
+      .then(prevDomains => prevDomains.forEach(domainTrie.add))
   );
 
   await new Promise<void>((resolve, reject) => {
@@ -222,7 +224,7 @@ export const buildSpeedtestDomainSet = task(import.meta.main, import.meta.path)(
       pMap[keyword] = span.traceChildAsync(`fetch speedtest endpoints: ${keyword}`, () => querySpeedtestApi(keyword)).then(hostnameGroup => {
         return hostnameGroup.forEach(hostname => {
           if (hostname) {
-            domains.add(hostname);
+            domainTrie.add(hostname);
           }
         });
       });
@@ -245,7 +247,7 @@ export const buildSpeedtestDomainSet = task(import.meta.main, import.meta.path)(
     }).catch(() => reject);
   });
 
-  const deduped = span.traceChildSync('sort result', () => sortDomains(domainDeduper(Array.from(domains))));
+  const deduped = span.traceChildSync('sort result', () => sortDomains(domainDeduper(domainTrie)));
 
   const description = [
     ...SHARED_DESCRIPTION,