Perf: improve domainlists performance

This commit is contained in:
SukkaW 2025-01-19 12:49:35 +08:00
parent ca9415ecc6
commit ced9f3fb0c

View File

@ -4,24 +4,28 @@ import { onBlackFound } from './shared';
import { fetchAssets } from '../fetch-assets'; import { fetchAssets } from '../fetch-assets';
import type { Span } from '../../trace'; import type { Span } from '../../trace';
function domainListLineCb(l: string, set: string[], includeAllSubDomain: boolean, meta: string, normalizeDomain = fastNormalizeDomain) { function domainListLineCb(l: string, set: string[], meta: string, normalizeDomain = fastNormalizeDomain) {
const line = processLine(l); const line = processLine(l);
if (!line) return; if (!line) return;
const domain = normalizeDomain(line); const domain = normalizeDomain(line);
if (!domain) { if (!domain) return;
// console.log(
// picocolors.red('[process domain list]'),
// picocolors.gray(`line: ${line}`),
// picocolors.gray(`domain: ${domain}`),
// picocolors.gray(meta)
// );
return;
}
onBlackFound(domain, meta); onBlackFound(domain, meta);
set.push(includeAllSubDomain ? `.${domain}` : domain); set.push(domain);
}
function domainListLineCbIncludeAllSubdomain(l: string, set: string[], meta: string, normalizeDomain = fastNormalizeDomain) {
const line = processLine(l);
if (!line) return;
const domain = normalizeDomain(line);
if (!domain) return;
onBlackFound(domain, meta);
set.push('.' + domain);
} }
export function processDomainLists( export function processDomainLists(
@ -29,6 +33,7 @@ export function processDomainLists(
domainListsUrl: string, mirrors: string[] | null, includeAllSubDomain = false, wwwToApex = false domainListsUrl: string, mirrors: string[] | null, includeAllSubDomain = false, wwwToApex = false
) { ) {
const domainNormalizer = wwwToApex ? fastNormalizeDomainIgnoreWww : fastNormalizeDomain; const domainNormalizer = wwwToApex ? fastNormalizeDomainIgnoreWww : fastNormalizeDomain;
const lineCb = includeAllSubDomain ? domainListLineCbIncludeAllSubdomain : domainListLineCb;
return span.traceChildAsync(`process domainlist: ${domainListsUrl}`, async (span) => { return span.traceChildAsync(`process domainlist: ${domainListsUrl}`, async (span) => {
const text = await span.traceChildAsync('download', () => fetchAssets( const text = await span.traceChildAsync('download', () => fetchAssets(
@ -40,7 +45,7 @@ export function processDomainLists(
span.traceChildSync('parse domain list', () => { span.traceChildSync('parse domain list', () => {
for (let i = 0, len = filterRules.length; i < len; i++) { for (let i = 0, len = filterRules.length; i < len; i++) {
domainListLineCb(filterRules[i], domainSets, includeAllSubDomain, domainListsUrl, domainNormalizer); lineCb(filterRules[i], domainSets, domainListsUrl, domainNormalizer);
} }
}); });
@ -55,6 +60,7 @@ export function processDomainListsWithPreload(
const domainNormalizer = wwwToApex ? fastNormalizeDomainIgnoreWww : fastNormalizeDomain; const domainNormalizer = wwwToApex ? fastNormalizeDomainIgnoreWww : fastNormalizeDomain;
const downloadPromise = fetchAssets(domainListsUrl, mirrors); const downloadPromise = fetchAssets(domainListsUrl, mirrors);
const lineCb = includeAllSubDomain ? domainListLineCbIncludeAllSubdomain : domainListLineCb;
return (span: Span) => span.traceChildAsync(`process domainlist: ${domainListsUrl}`, async (span) => { return (span: Span) => span.traceChildAsync(`process domainlist: ${domainListsUrl}`, async (span) => {
const text = await span.traceChildPromise('download', downloadPromise); const text = await span.traceChildPromise('download', downloadPromise);
@ -63,7 +69,7 @@ export function processDomainListsWithPreload(
span.traceChildSync('parse domain list', () => { span.traceChildSync('parse domain list', () => {
for (let i = 0, len = filterRules.length; i < len; i++) { for (let i = 0, len = filterRules.length; i < len; i++) {
domainListLineCb(filterRules[i], domainSets, includeAllSubDomain, domainListsUrl, domainNormalizer); lineCb(filterRules[i], domainSets, domainListsUrl, domainNormalizer);
} }
}); });