Perf: smaller local dns mapping

This commit is contained in:
SukkaW
2024-09-26 01:18:23 +08:00
parent 3bc4e69f35
commit 5f027572cf
5 changed files with 172 additions and 134 deletions

View File

@@ -12,19 +12,28 @@ import { appendArrayInPlace } from './lib/append-array-in-place';
import { OUTPUT_INTERNAL_DIR, OUTPUT_MODULES_DIR, SOURCE_DIR } from './constants/dir';
import { RulesetOutput } from './lib/create-file';
const getRule = (domain: string) => {
switch (domain[0]) {
case '+':
case '$':
return `DOMAIN-SUFFIX,${domain.slice(1)}`;
default:
return `DOMAIN-SUFFIX,${domain}`;
}
};
export const getDomesticAndDirectDomainsRulesetPromise = createMemoizedPromise(async () => {
const domestics = await readFileIntoProcessedArray(path.join(SOURCE_DIR, 'non_ip/domestic.conf'));
const directs = await readFileIntoProcessedArray(path.resolve(SOURCE_DIR, 'non_ip/direct.conf'));
const lans: string[] = [];
Object.entries(DOMESTICS).forEach(([, { domains }]) => {
appendArrayInPlace(domestics, domains.map((domain) => `DOMAIN-SUFFIX,${domain}`));
appendArrayInPlace(domestics, domains.map(getRule));
});
Object.entries(DIRECTS).forEach(([, { domains }]) => {
appendArrayInPlace(directs, domains.map((domain) => `DOMAIN-SUFFIX,${domain}`));
appendArrayInPlace(directs, domains.map(getRule));
});
Object.entries(LANS).forEach(([, { domains }]) => {
appendArrayInPlace(lans, domains.map((domain) => `DOMAIN-SUFFIX,${domain}`));
appendArrayInPlace(lans, domains.map(getRule));
});
return [domestics, directs, lans] as const;
@@ -74,10 +83,22 @@ export const buildDomesticRuleset = task(require.main === module, __filename)(as
'[Host]',
...dataset.flatMap(([, { domains, dns, hosts }]) => [
...Object.entries(hosts).flatMap(([dns, ips]: [dns: string, ips: string[]]) => `${dns} = ${ips.join(', ')}`),
...domains.flatMap((domain) => [
`${domain} = server:${dns}`,
`*.${domain} = server:${dns}`
])
...domains.flatMap((domain) => {
if (domain[0] === '$') {
return [
`${domain.slice(1)} = server:${dns}`
];
}
if (domain[0] === '+') {
return [
`*.${domain.slice(1)} = server:${dns}`
];
}
return [
`${domain} = server:${dns}`,
`*.${domain} = server:${dns}`
];
})
])
],
path.resolve(OUTPUT_MODULES_DIR, 'sukka_local_dns_mapping.sgmodule')
@@ -90,7 +111,16 @@ export const buildDomesticRuleset = task(require.main === module, __filename)(as
'nameserver-policy': dataset.reduce<Record<string, string | string[]>>(
(acc, [, { domains, dns }]) => {
domains.forEach((domain) => {
acc[`+.${domain}`] = dns === 'system'
let domainWildcard = domain;
if (domain[0] === '$') {
domainWildcard = domain.slice(1);
} else if (domain[0] === '+') {
domainWildcard = `*.${domain.slice(1)}`;
} else {
domainWildcard = `+.${domain}`;
}
acc[domainWildcard] = dns === 'system'
? [
'system://',
'system',

View File

@@ -92,7 +92,10 @@ const REDIRECT_MIRROR_307 = [
['google.cn/', 'https://google.com/'],
['www.google.cn/', 'https://www.google.com/'],
['g.cn/', 'https://google.com/'],
['www.g.cn/', 'https://www.google.com/']
['www.g.cn/', 'https://www.google.com/'],
// avg.tv/sm114514 -> https://www.nicovideo.jp/watch/sm114514
['acg.tv/sm', 'https://www.nicovideo.jp/watch/sm'],
['acg.tv/', 'https://b23.tv/']
];
const REDIRECT_FAKEWEBSITES = [

View File

@@ -392,8 +392,6 @@ export async function compareAndWriteFile(span: Span, linesA: string[], filePath
if (p) await p;
}
await asyncWriteToStream(writeStream, '\n');
writeStream.end();
});
}