node.js - 如何以低优先级启动 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()
解决方案
您可以使用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();
})();
推荐阅读
- python - 在 fit_generator 上使用 multi_gpu_model 时出现不兼容的形状错误
- python - 如何有效地进行大排列?
- html - Html 和 CSS 页面不会随浏览器大小缩放
- sql - 每月和每日动态计数
- javascript - HTMLElement 类型上不存在属性“contentWindow” - 从一台服务器发送到另一台服务器
- docker - 如何将 Electron GUI 应用程序放入 Docker 容器中?
- linux - 目录中的幻像文件
- mumps - 在调用 Piece 函数时,mumps 字符串是否发生了突变?
- wpf - 控件模板中的 UWP 双向绑定
- rx-java2 - 使用 RxJava2 时,我用什么代替 Func1?