首页 > 解决方案 > 如何以低优先级启动 puppeteer 进程?

问题描述

我在 Linux 主机上通过 Node API 使用 puppeteer。我的用例是为 WebGL 地图创建不同大小的屏幕截图。

通过命令行参数调用节点脚本,它会生成一些不同大小的屏幕截图,然后退出。

我的问题是 puppeteer 进程会大大降低网络服务器的速度,因为它们位于同一主机上。

如何确保 puppeteer 进程和 Chrome 子进程以最低/空闲进程优先级启动?

这是我的节点脚本的骨架:

const puppeteer = require('puppeteer')

const SCREENSHOT_SIZES = ...

async function run() {
  const browser = await puppeteer.launch({})

  for (const size of SCREENSHOT_SIZES) {
    const page = await browser.newPage()

    await page.setViewport({
      width: size.w,
      height: size.h,
    })

    try {
      await page.goto(url, { waitUntil: 'networkidle0', timeout: 60 * 1000 })
    } catch (error) {
      console.error(error)
    }

    await page.screenshot({
      path: ... 
    })
  }

  await browser.close()
}

run()

标签: node.jsgoogle-chromepuppeteerheadless-browsergoogle-chrome-headless

解决方案


您可以使用browser.process().pid来获取pid衍生的浏览器进程。然后可以使用os.setPriority()浏览器的pid.

完整示例:

'use strict';

const os = require( 'os' );
const puppeteer = require( 'puppeteer' );

( async () =>
{
    const browser = await puppeteer.launch();

    os.setPriority( browser.process().pid, 15 );

    const page = await browser.newPage();

    await page.goto( 'https://www.example.com/' );

    await browser.close();
})();

推荐阅读