繁体   English   中英

Puppeteer 生产到 Vercel 性能问题 Next.js

[英]Puppeteer production to Vercel performance issues Next.js

我正在尝试将我的网站推送到 prod,但是 memory 太大或者性能太慢并返回 504 状态。 根据 vercel 这是因为请求时间太长? 我是木偶操纵者的新手,已经尝试了一切,但我不明白为什么它在本地有效但在产品中无效。

const chrome = require("chrome-aws-lambda");

export default async function handler(req, res) {
  try {
    const browser = await chrome.puppeteer.launch(
      process.env.NODE_ENV === "production"
        ? {
            args: chrome.args,
            executablePath: await chrome.executablePath,
            headless: true,
          }
        : {}
    );

    const aboutBlankPage = (await browser.pages())[0];
    if (aboutBlankPage) {
      await aboutBlankPage.close();
    }

    const page = await browser.newPage();
    await page.goto("https://mars.nasa.gov/msl/weather/");

    const nasaWeatherDataScrape = await page.evaluate(() => {
      const high = Array.from(document.querySelectorAll(".celsius .high")).map(
        (x) => x.innerText
      );
      const low = Array.from(document.querySelectorAll(".celsius .low")).map(
        (x) => x.innerText
      );
      return {
        high,
        low,
      };
    });

    console.log(nasaWeatherDataScrape, "in");
    res.json(nasaWeatherDataScrape);

    const newPage = (await browser.pages())[0];

    await newPage.close();
  } catch (error) {
    console.log(error);

    res.status(400).json({
      message: error.message,
    });
  }
}

这是因为默认的 Chromium package 超过了 Vercel 上的 50MB function 大小限制

您必须在低于 Vercel 服务器限制的版本中故意添加chrome-aws-lambda 我怀疑您的问题具体是chrome-aws-lambda版本。

请尝试

npm i --save chrome-aws-lambda@^8.0.2 puppeteer-core@^8.0.0

这是一个很好的教程,解释了这个过程。 https://gist.github.com/kettanaito/56861aff96e6debc575d522dd03e5725

以及一个简化的工作示例。 https://gist.github.com/agungjk/ff542367470d156478f7381af2cf7e60

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM