From 47ef19e0f8cee3e977413e18583b5d1eeed735a6 Mon Sep 17 00:00:00 2001 From: SukkaW Date: Wed, 11 Dec 2024 21:57:14 +0800 Subject: [PATCH] Chore: try new way of reading files by line --- Build/lib/fetch-text-by-line.bench.ts | 7 ++++--- Build/lib/fetch-text-by-line.ts | 16 ++++++++++++---- Build/lib/misc.ts | 11 +---------- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/Build/lib/fetch-text-by-line.bench.ts b/Build/lib/fetch-text-by-line.bench.ts index deeb1f40..34d8c6cf 100644 --- a/Build/lib/fetch-text-by-line.bench.ts +++ b/Build/lib/fetch-text-by-line.bench.ts @@ -1,9 +1,9 @@ -import { readFileByLine, readFileByLineLegacy } from './fetch-text-by-line'; +import { readFileByLine, readFileByLineLegacy, readFileByLineNew } from './fetch-text-by-line'; import path from 'node:path'; import fsp from 'node:fs/promises'; -import { SOURCE_DIR } from '../constants/dir'; +import { OUTPUT_SURGE_DIR } from '../constants/dir'; -const file = path.join(SOURCE_DIR, 'domainset/cdn.conf'); +const file = path.join(OUTPUT_SURGE_DIR, 'domainset/reject_extra.conf'); (async () => { const { bench, group, run } = await import('mitata'); @@ -11,6 +11,7 @@ const file = path.join(SOURCE_DIR, 'domainset/cdn.conf'); group(() => { bench('readFileByLine', () => Array.fromAsync(readFileByLine(file))); bench('readFileByLineLegacy', () => Array.fromAsync(readFileByLineLegacy(file))); + bench('readFileByLineNew', async () => Array.fromAsync(await readFileByLineNew(file))); bench('fsp.readFile', () => fsp.readFile(file, 'utf-8').then((content) => content.split('\n'))); }); diff --git a/Build/lib/fetch-text-by-line.ts b/Build/lib/fetch-text-by-line.ts index 5b791536..cec59c87 100644 --- a/Build/lib/fetch-text-by-line.ts +++ b/Build/lib/fetch-text-by-line.ts @@ -1,5 +1,6 @@ import fs from 'node:fs'; import { Readable } from 'node:stream'; +import fsp from 'node:fs/promises'; import type { FileHandle } from 'node:fs/promises'; import readline from 'node:readline'; @@ -25,10 +26,17 @@ export const readFileByLineLegacy: ((file: string /* | FileHandle */) => AsyncIt .pipeThrough(new TextDecoderStream()) .pipeThrough(new TextLineStream()); -export const readFileByLine: ((file: string /* | FileHandle */) => AsyncIterable) = (file: string) => readline.createInterface({ - input: fs.createReadStream(file/* , { encoding: 'utf-8' } */), - crlfDelay: Infinity -}); +export function readFileByLine(file: string): AsyncIterable { + return readline.createInterface({ + input: fs.createReadStream(file/* , { encoding: 'utf-8' } */), + crlfDelay: Infinity + }); +} + +const fdReadLines = (fd: FileHandle) => fd.readLines(); +export async function readFileByLineNew(file: string): Promise> { + return fsp.open(file, 'r').then(fdReadLines); +} function ensureResponseBody(resp: T): NonNullable { if (resp.body == null) { diff --git a/Build/lib/misc.ts b/Build/lib/misc.ts index 6d269fa5..bf44fdab 100644 --- a/Build/lib/misc.ts +++ b/Build/lib/misc.ts @@ -1,7 +1,6 @@ -import path, { dirname } from 'node:path'; +import { dirname } from 'node:path'; import fs from 'node:fs'; import fsp from 'node:fs/promises'; -import { OUTPUT_CLASH_DIR, OUTPUT_SINGBOX_DIR, OUTPUT_SURGE_DIR } from '../constants/dir'; export function fastStringCompare(a: string, b: string) { const lenA = a.length; @@ -68,14 +67,6 @@ export function domainWildCardToRegex(domain: string) { return result; } -export function output(id: string, type: 'non_ip' | 'ip' | 'domainset') { - return [ - path.join(OUTPUT_SURGE_DIR, type, id + '.conf'), - path.join(OUTPUT_CLASH_DIR, type, id + '.txt'), - path.join(OUTPUT_SINGBOX_DIR, type, id + '.json') - ] as const; -} - export function withBannerArray(title: string, description: string[] | readonly string[], date: Date, content: string[]) { return [ '#########################################',