微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

木偶优化

如何解决木偶优化

我有一个网络应用程序,可以生成相当大的 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 举报,一经查实,本站将立刻删除。