我正在尝试使用无头铬(使用puppeteer)将 html打印为 pdf并且一切正常,除非 html 包含大型 png 图像(超过 10.000x10.000px),渲染页面的整个过程需要非常长的时间(最多半小时,但如果使用非无头模式只需要大约 10 秒)。经过几天的调查和调整,我得出结论,这一定是页面合成过程的问题。
以下是chrome://gpu无头和非无头模式下的页面转储。只有显著差异我注意到的是,headlessly乳宁镶边时,操纵木偶本身追加--disable-gpu-compositing和--allow-pre-commit-input我相信这些负责戏剧性的服务表现下拉。
此外,在非无头模式下,chrome 看到 2 个 GPU 单元:
GPU0 VENDOR= 0x10de, DEVICE=0x1d01 *ACTIVE*
GPU1 VENDOR= 0x8086, DEVICE=0x1912
Run Code Online (Sandbox Code Playgroud)
在无头模式下只有一个:
GPU0 VENDOR= 0xffff [Google Inc.], DEVICE=0xffff [Google SwiftShader] *ACTIVE*
Run Code Online (Sandbox Code Playgroud)
这是 Vulkan 和 OpenGL ES 图形 API 的基于 CPU 的实现。
所以基本上我的问题是:
有没有办法使用实际的gpu(特别是gpu合成)使用puppeteer运行无头铬/铬,或者有没有办法在非无头模式下将页面打印为pdf?
这是我的非无头 chrome gpu 配置(页面渲染速度很快):
Canvas: Hardware accelerated
Flash: Hardware accelerated
Flash Stage3D: Hardware accelerated
Flash Stage3D Baseline profile: Hardware accelerated
Compositing: Hardware accelerated …Run Code Online (Sandbox Code Playgroud)