Perf: improve speedtest hosts

This commit is contained in:
SukkaW 2024-06-30 00:32:26 +08:00
parent 175ba65127
commit 2d9c401219

View File

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