mirror of
https://github.com/SukkaW/Surge.git
synced 2025-12-16 03:00:34 +08:00
Perf: improve domainlists performance
This commit is contained in:
parent
ca9415ecc6
commit
ced9f3fb0c
@ -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);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user