Using POO do not increace performances

This commit is contained in:
Joseph Garrone 2024-05-25 12:30:21 +02:00
parent 84bb2338d1
commit 6bb7f7dc16

View File

@ -32,14 +32,13 @@ export async function extractArchive(params: {
dDone.resolve(); dDone.resolve();
}); });
// TODO: See benchmark if using a class here improves the performance over anonymous functions const writeFile = async (
class FileWriter { entry: yauzl.Entry,
constructor(private entry: yauzl.Entry) {} params: {
public async writeToFile(params: {
filePath: string; filePath: string;
modifiedData?: Buffer; modifiedData?: Buffer;
}): Promise<void> { }
): Promise<void> => {
const { filePath, modifiedData } = params; const { filePath, modifiedData } = params;
await fs.mkdir(pathDirname(filePath), { recursive: true }); await fs.mkdir(pathDirname(filePath), { recursive: true });
@ -50,7 +49,7 @@ export async function extractArchive(params: {
} }
const readStream = await new Promise<stream.Readable>(resolve => const readStream = await new Promise<stream.Readable>(resolve =>
zipFile.openReadStream(this.entry, async (error, readStream) => { zipFile.openReadStream(entry, async (error, readStream) => {
if (error) { if (error) {
dDone.reject(error); dDone.reject(error);
return; return;
@ -72,11 +71,11 @@ export async function extractArchive(params: {
}); });
await dDoneWithFile.pr; await dDoneWithFile.pr;
} };
public readFile(): Promise<Buffer> { const readFile = (entry: yauzl.Entry) =>
return new Promise<Buffer>(resolve => new Promise<Buffer>(resolve =>
zipFile.openReadStream(this.entry, async (error, readStream) => { zipFile.openReadStream(entry, async (error, readStream) => {
if (error) { if (error) {
dDone.reject(error); dDone.reject(error);
return; return;
@ -97,8 +96,6 @@ export async function extractArchive(params: {
}); });
}) })
); );
}
}
zipFile.on("entry", async (entry: yauzl.Entry) => { zipFile.on("entry", async (entry: yauzl.Entry) => {
handle_file: { handle_file: {
@ -107,12 +104,10 @@ export async function extractArchive(params: {
break handle_file; break handle_file;
} }
const fileWriter = new FileWriter(entry);
await onArchiveFile({ await onArchiveFile({
relativeFilePathInArchive: entry.fileName.split("/").join(pathSep), relativeFilePathInArchive: entry.fileName.split("/").join(pathSep),
readFile: fileWriter.readFile.bind(fileWriter), readFile: () => readFile(entry),
writeFile: fileWriter.writeToFile.bind(fileWriter) writeFile: params => writeFile(entry, params)
}); });
} }