optimize: browser open / close at sequential printing
This commit is contained in:
parent
e3ff3456ad
commit
8e80901c0f
2 changed files with 66 additions and 26 deletions
|
@ -1,10 +1,47 @@
|
|||
import puppeteer from "puppeteer";
|
||||
import puppeteer, { Browser } from "puppeteer";
|
||||
import { TemplateHelper } from "./templateHelper";
|
||||
import { PermissionModule } from "../type/permissionTypes";
|
||||
import { FileSystemHelper } from "./fileSystemHelper";
|
||||
import { PDFDocument } from "pdf-lib";
|
||||
import { StringHelper } from "./stringHelper";
|
||||
|
||||
export abstract class PdfExport {
|
||||
private static browserInstance: undefined | Browser = undefined;
|
||||
private static timeout: undefined | NodeJS.Timeout = undefined;
|
||||
private static printing = new Map<string, string>();
|
||||
|
||||
private static async renderTemplate(
|
||||
template: `${PermissionModule}` | `${PermissionModule}.${string}`,
|
||||
title: string,
|
||||
data: any,
|
||||
customTemplate?: {
|
||||
headerId?: number;
|
||||
footerId?: number;
|
||||
bodyId?: string | number;
|
||||
headerHeight: number;
|
||||
footerHeight: number;
|
||||
}
|
||||
): Promise<{ header: string; footer: string; body: string; headerMargin?: number; footerMargin?: number }> {
|
||||
if (!customTemplate) {
|
||||
return await TemplateHelper.renderFileForModule({
|
||||
module: template,
|
||||
headerData: data,
|
||||
bodyData: data,
|
||||
footerData: data,
|
||||
title: title,
|
||||
});
|
||||
} else {
|
||||
return await TemplateHelper.renderFileForCustom({
|
||||
module: template,
|
||||
customTemplate,
|
||||
headerData: data,
|
||||
bodyData: data,
|
||||
footerData: data,
|
||||
title: title,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
static async renderFile({
|
||||
template,
|
||||
title = "pdf-export FF Admin",
|
||||
|
@ -28,33 +65,25 @@ export abstract class PdfExport {
|
|||
footerHeight: number;
|
||||
};
|
||||
}) {
|
||||
try {
|
||||
clearTimeout(this.timeout);
|
||||
} catch (err) {}
|
||||
let id = StringHelper.random(32);
|
||||
this.printing.set(id, "printing");
|
||||
|
||||
if (folder != "") FileSystemHelper.createFolder(folder);
|
||||
|
||||
let header: string, footer: string, body: string, headerMargin: number, footerMargin: number;
|
||||
if (!customTemplate) {
|
||||
({ header, footer, body, headerMargin, footerMargin } = await TemplateHelper.renderFileForModule({
|
||||
module: template,
|
||||
headerData: data,
|
||||
bodyData: data,
|
||||
footerData: data,
|
||||
title: title,
|
||||
}));
|
||||
} else {
|
||||
({ header, footer, body, headerMargin, footerMargin } = await TemplateHelper.renderFileForCustom({
|
||||
module: template,
|
||||
customTemplate,
|
||||
headerData: data,
|
||||
bodyData: data,
|
||||
footerData: data,
|
||||
title: title,
|
||||
}));
|
||||
const renderedTemplate = await this.renderTemplate(template, title, data, customTemplate);
|
||||
let { header, footer, body, headerMargin, footerMargin } = renderedTemplate;
|
||||
|
||||
if (!this.browserInstance || !this.browserInstance.connected) {
|
||||
this.browserInstance = await puppeteer.launch({
|
||||
headless: true,
|
||||
args: ["--no-sandbox", "--disable-gpu", "--disable-setuid-sandbox"],
|
||||
});
|
||||
}
|
||||
|
||||
const browser = await puppeteer.launch({
|
||||
headless: true,
|
||||
args: ["--no-sandbox", "--disable-gpu", "--disable-setuid-sandbox"],
|
||||
});
|
||||
const page = await browser.newPage();
|
||||
const page = await this.browserInstance.newPage();
|
||||
await page.setContent(body, { waitUntil: "domcontentloaded" });
|
||||
|
||||
const exportPath = FileSystemHelper.formatPath(folder, `${filename}.pdf`);
|
||||
|
@ -74,7 +103,16 @@ export abstract class PdfExport {
|
|||
footerTemplate: footer,
|
||||
});
|
||||
|
||||
await browser.close();
|
||||
await page.close();
|
||||
|
||||
this.printing.delete(id);
|
||||
|
||||
if (this.printing.size == 0) {
|
||||
this.timeout = setTimeout(() => {
|
||||
this.browserInstance.close();
|
||||
this.browserInstance = undefined;
|
||||
}, 5000);
|
||||
}
|
||||
|
||||
return pdf;
|
||||
}
|
||||
|
|
|
@ -11,7 +11,9 @@ export abstract class TemplateHelper {
|
|||
try {
|
||||
tmpFile = FileSystemHelper.readTemplateFile(`/src/templates/${template}.template.html`);
|
||||
} catch (err) {
|
||||
tmpFile = FileSystemHelper.readTemplateFile(`/src/templates/${template.split(".")[1]}.template.html`);
|
||||
tmpFile = FileSystemHelper.readTemplateFile(
|
||||
`/src/templates/${template.split(".")[template.split(".").length - 1]}.template.html`
|
||||
);
|
||||
}
|
||||
return tmpFile;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue