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,9 +90,8 @@ 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',
@ -179,12 +178,15 @@ export const buildSpeedtestDomainSet = task(import.meta.main, import.meta.path)(
'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,