【问题标题】:Will heroku crash if I run multiple instances of puppeteer?如果我运行多个 puppeteer 实例,heroku 会崩溃吗?
【发布时间】:2022-02-28 15:58:14
【问题描述】:

所以我创建了一个简单的 node.js 应用程序来使用 puppeteer 自动生成 PDF 并通过电子邮件发送。在我的本地服务器上一切正常,但是一旦我部署到 heroku,如果我尝试创建超过 2 个 PDF,服务器将超时。因此,如果我只在我的 heroku 应用程序上创建 2 个 PDF,它可以正常工作,但是一旦我尝试生成超过该应用程序超时的内容。

这是我用来生成每个 PDF 的循环:

for (let x = 1; x <= numTickets; x++) {
console.log(x, " / ", numTickets);
try {
  const browser = await puppeteer.launch({
    headless: true,
    args: ["--no-sandbox", "--disable-setuid-sandbox"],
  });
  const page = await browser.newPage();

  //compile html
  const content = await compile(template, {
    billing,
    id: id + "-" + `${x}`,
    campaign,
  });
  
  options.attachments.push({
    filename: `${billing.first_name}-housedoubleup-${id}-${x}.pdf`,
    path: `./${billing.first_name}-housedoubleup-${id}-${x}.pdf`,
    contentType: "application/pdf",
  });

  await page.setContent(content);
  await page.emulateMediaType("screen");
  await page.pdf({
    path: `${billing.first_name}-housedoubleup-${id}-${x}.pdf`,
    format: "a5",
    printBackground: true,
    landscape: true,
  });

  console.log("done");
} catch (e) {
  console.log("Error -> ", e);
}

if (x === numTickets) {
  sendEmail(options);
}
  }

我想知道我的 heroku 免费套餐上的 512MB RAM 是否会限制正在生成的其余 PDF。

如果有人知道如何提供帮助或可能出了什么问题,我将不胜感激 :)

【问题讨论】:

  • 也许使用工作进程?这段代码是从哪里调用的——HTTP 路由处理程序或...?
  • 我正在经历同样的事情。当我只有 2 个 puppeteer 实例打开 chrome 时,它​​不会崩溃,但似乎不再让 heroku 崩溃。我没有使用节点服务器,但我也尝试过,它也崩溃了。

标签: javascript node.js heroku puppeteer


【解决方案1】:

每次迭代,您的循环都会创建一个带有新页面的新浏览器实例。尝试使用,

  1. 单个浏览器实例
  2. 整个循环中的单个页面实例。

【讨论】:

    猜你喜欢
    • 2020-08-23
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 2015-03-13
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多