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 { 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,