木偶优化

问题描述

我有一个网络应用程序,可以生成相当大的 PDF 文档,可能有 100 页甚至更多。

工作流程是这样的:

  1. 使用 nunjucks 模板生成 html
  2. 打开 puppeteer 浏览器
  3. 创建 PDF 首页(见下面的代码
  4. 创建 PDF 页面
  5. 页面合并到一个文档并创建一个缓冲区
import { PDFDocument } from 'pdf-lib';

const pdfHtml = await nunjucks.render(...);

const thebrowser = await puppeteer.launch({
  args: [
    '--disable-dev-shm-usage','--no-first-run','--no-sandBox','--no-zygote','--single-process',],headless: true
});

const page = await thebrowser.newPage();

awaut page.setContent(`${pdfHtml}`,{ waitUntil: 'networkidle0' });

const frontPage: Buffer = await page.pdf({
  ... someOptions,pageRanges: '1'
});

const pdfpages: Buffer = await page.pdf({
  ... someOptions,pageRanges: '2-',footerTemplate: ...,});

const pdfDoc = await PDFDocument.create();
const coverDoc = await PDFDocument.load(frontPage);
const [coverPage] = await pdfDoc.copyPages(coverDoc,[0]);
pdfDoc.addPage(coverPage);

const mainDoc = await PDFDocument.load(reportPages);
for (let i = 0; i < mainDoc.getPageCount(); i++) {
    const [aMainPage] = await pdfDoc.copyPages(mainDoc,[i]);
    pdfDoc.addPage(aMainPage);
}

pdfBytes = Buffer.from(await pdfDoc.save());
// handle the bytes here

当 PDF 变得非常大时,此操作将花费相当长的时间并使用大量内存,从而使 API 停顿直至完成。我能做些什么来优化它?或者我可以使用其他工具来避免 API 停顿吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...