Skip to content

Commit a0d99de

Browse files
committed
Perf: improve memory GC
1 parent 16ce1d0 commit a0d99de

File tree

3 files changed

+25
-31
lines changed

3 files changed

+25
-31
lines changed

Build/build-reject-domainset.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,14 @@ export const buildRejectDomainSet = task(require.main === module, __filename)(as
9090
hostsDownloads.map(task => task(childSpan).then(appendArrayToRejectOutput)),
9191
hostsExtraDownloads.map(task => task(childSpan).then(appendArrayToRejectExtraOutput)),
9292

93-
domainListsDownloads.map(task => task(childSpan).then(appendArrayToRejectOutput)),
94-
domainListsExtraDownloads.map(task => task(childSpan).then(appendArrayToRejectExtraOutput)),
93+
domainListsDownloads.map((task, index) => task(
94+
childSpan,
95+
DOMAIN_LISTS[index][2] ? rejectOutput.addDomainSuffix.bind(rejectOutput) : rejectOutput.addDomain.bind(rejectOutput)
96+
)),
97+
domainListsExtraDownloads.map((task, index) => task(
98+
childSpan,
99+
DOMAIN_LISTS_EXTRA[index][2] ? rejectExtraOutput.addDomainSuffix.bind(rejectExtraOutput) : rejectExtraOutput.addDomain.bind(rejectExtraOutput)
100+
)),
95101

96102
adguardFiltersDownloads.map(
97103
task => task(childSpan).then(({ whiteDomains, whiteDomainSuffixes, blackDomains, blackDomainSuffixes }) => {

Build/lib/get-phishing-domains.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,9 @@ import type { Span } from '../trace';
77
import { appendArrayInPlaceCurried } from './append-array-in-place';
88
import { PHISHING_DOMAIN_LISTS_EXTRA, PHISHING_HOSTS_EXTRA } from '../constants/reject-data-source';
99

10-
const downloads = [
11-
...PHISHING_DOMAIN_LISTS_EXTRA.map(entry => processDomainListsWithPreload(...entry)),
12-
...PHISHING_HOSTS_EXTRA.map(entry => processHostsWithPreload(...entry))
13-
];
10+
const domainListsDownloads = PHISHING_DOMAIN_LISTS_EXTRA.map(entry => processDomainListsWithPreload(...entry));
11+
12+
const downloads = PHISHING_HOSTS_EXTRA.map(entry => processHostsWithPreload(...entry));
1413

1514
const pool = new Worktank({
1615
name: 'process-phishing-domains',
@@ -187,6 +186,11 @@ export function getPhishingDomains(parentSpan: Span) {
187186
const domainGroups = await Promise.all(downloads.map(task => task(curSpan)));
188187
domainGroups.forEach(appendArrayInPlaceCurried(domainArr));
189188

189+
await Promise.all(domainListsDownloads.map((task, index) => task(
190+
curSpan,
191+
PHISHING_DOMAIN_LISTS_EXTRA[index][2] ? (domain: string) => domainArr.push('.' + domain) : domainArr.push.bind(domainArr)
192+
)));
193+
190194
return domainArr;
191195
});
192196

Build/lib/parse-filter/domainlists.ts

Lines changed: 9 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,26 @@
1-
import { fastNormalizeDomain, fastNormalizeDomainWithoutWww } from '../normalize-domain';
1+
import { fastNormalizeDomainWithoutWww } from '../normalize-domain';
22
import { onBlackFound } from './shared';
33
import { fetchAssets } from '../fetch-assets';
44
import type { Span } from '../../trace';
55

6-
function domainListLineCb(line: string, set: string[], meta: string, normalizeDomain = fastNormalizeDomain) {
7-
const domain = normalizeDomain(line);
8-
if (!domain) return;
9-
10-
onBlackFound(domain, meta);
11-
12-
set.push(domain);
13-
}
14-
15-
function domainListLineCbIncludeAllSubdomain(line: string, set: string[], meta: string, normalizeDomain = fastNormalizeDomain) {
16-
const domain = normalizeDomain(line);
17-
if (!domain) return;
18-
19-
onBlackFound(domain, meta);
20-
21-
set.push('.' + domain);
22-
}
236
export function processDomainListsWithPreload(
247
domainListsUrl: string, mirrors: string[] | null,
25-
includeAllSubDomain = false
8+
_includeAllSubDomain = false
269
) {
2710
const downloadPromise = fetchAssets(domainListsUrl, mirrors, true);
28-
const lineCb = includeAllSubDomain ? domainListLineCbIncludeAllSubdomain : domainListLineCb;
2911

30-
return (span: Span) => span.traceChildAsync(`process domainlist: ${domainListsUrl}`, async (span) => {
12+
return (span: Span, onDomain: (domain: string) => void) => span.traceChildAsync(`process domainlist: ${domainListsUrl}`, async (span) => {
3113
const filterRules = await span.traceChildPromise('download', downloadPromise);
32-
const domainSets: string[] = [];
3314

3415
span.traceChildSync('parse domain list', () => {
3516
for (let i = 0, len = filterRules.length; i < len; i++) {
36-
lineCb(filterRules[i], domainSets, domainListsUrl, fastNormalizeDomainWithoutWww);
17+
const domain = fastNormalizeDomainWithoutWww(filterRules[i]);
18+
if (!domain) return;
19+
20+
onBlackFound(domain, domainListsUrl);
21+
22+
onDomain(domain);
3723
}
3824
});
39-
40-
return domainSets;
4125
});
4226
}

0 commit comments

Comments
 (0)