【问题标题】:How to start puppeteer processes as low priority?如何以低优先级启动 puppeteer 进程?
【发布时间】:2018-09-10 20:39:48
【问题描述】:

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

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

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

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

这是我的 Node 脚本的框架:

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.js google-chrome puppeteer headless-browser google-chrome-headless


【解决方案1】:

您可以使用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();
})();

【讨论】:

  • 您确定页面没有自己的独立进程吗?
猜你喜欢
  • 2018-04-01
  • 2010-11-03
  • 2012-02-21
  • 2011-09-07
  • 1970-01-01
  • 1970-01-01
  • 2012-11-27
  • 1970-01-01
  • 2010-11-25
相关资源
最近更新 更多