我正在尝试使用 Headless Chromium(使用 Puppeteer)将 HTML 打印成 PDF,一切正常,但如果 HTML 包含较大的 PNG 图像(超过 10,000x10,000px),整个页面渲染过程会非常耗时(最多半小时,但如果使用非 Headless 模式,则只需大约 10 秒)。经过几天的调查和调整,我得出结论,这一定是页面合成过程的问题。
以下是无头模式和非无头模式下页面的转储chrome://gpu。我注意到的唯一显著区别是,在无头模式下运行 Chrome 时,Puppeteer 会自行附加内容--disable-gpu-compositing,--allow-pre-commit-input我认为这是导致性能大幅下降的原因。
此外,在非无头模式下,chrome 会看到 2 个 gpu 单元:
GPU0 VENDOR= 0x10de, DEVICE=0x1d01 *ACTIVE*
GPU1 VENDOR= 0x8086, DEVICE=0x1912在无头模式下,只有一个:
GPU0 VENDOR= 0xffff [Google Inc.], DEVICE=0xffff [Google SwiftShader] *ACTIVE*这是基于CPU的Vulkan和OpenGL ES图形API的实现。
所以我的问题是:
是否有办法使用实际的gpu (特别是gpu合成)通过 puppeteer 运行无头 chrome/chromium,或者有没有办法在非无头模式下将页面打印为 pdf?
这是我的非无头 chrome gpu 配置(页面渲染速度很快):
Canvas: Hardware accelerated
Flash: Hardware accelerated
Flash Stage3D: Hardware accelerated
Flash Stage3D Baseline profile: Hardware accelerated
Compositing: Hardware accelerated
Multiple Raster Threads: Force enabled
Out-of-process Rasterization: Hardware accelerated
OpenGL: Enabled
Hardware Protected Video Decode: Unavailable
Rasterization: Hardware accelerated on all pages
Skia Renderer: Enabled
Video Decode: Unavailable
Vulkan: Disabled
WebGL: Hardware accelerated
WebGL2: Hardware accelerated
Chrome version: Chrome/83.0.4103.0
Operating system: Linux 4.13.0-46-generic
2D graphics backend: Skia/83 8ce842d38d0b32149e874d6855c91e8c68ba65a7
Command line:
/home/wojtas/projects/project-generator/node_modules/puppeteer/.local-
chromium/linux-756035/chrome-linux/chrome
--disable-background-networking
--enable-features=NetworkService,NetworkServiceInProcess
--disable-background-timer-throttling
--disable-backgrounding-occluded-windows
--disable-breakpad
--disable-client-side-phishing-detection
--disable-component-extensions-with-background-pages
--disable-default-apps
--disable-dev-shm-usage
--disable-extensions
--disable-features=TranslateUI
--disable-hang-monitor
--disable-ipc-flooding-protection
--disable-popup-blocking
--disable-prompt-on-repost
--disable-renderer-backgrounding
--disable-sync
--force-color-profile=srgb
--metrics-recording-only
--no-first-run
--enable-automation
--password-store=basic
--use-mock-keychain
--disable-web-security
--user-data-dir=/var/www/project-generator/var/chrome-user-data
--allow-file-access-from-files
--no-sandbox
--no-sandbox-and-elevated
--no-zygote
--enable-webgl
--use-gl=desktop
--use-skia-renderer
--enable-gpu-rasterization
--enable-zero-copy
--disable-gpu-sandbox
--enable-native-gpu-memory-buffers
--disable-background-timer-throttling
--disable-backgrounding-occluded-windows
--disable-renderer-backgrounding
--ignore-certificate-errors
--enable-hardware-overlays
--num-raster-threads=4
--default-tile-width=512
--default-tile-height=512
--enable-oop-rasterization
--remote-debugging-port=0
--flag-switches-begin
--flag-switches-end
--enable-audio-service-sandbox 这是无头 chrome gpu 配置(速度非常慢)
Graphics Feature Status
Canvas: Hardware accelerated
Flash: Hardware accelerated
Flash Stage3D: Hardware accelerated
Flash Stage3D Baseline profile: Hardware accelerated
Compositing: Software only. Hardware acceleration disabled
Multiple Raster Threads: Force enabled
Out-of-process Rasterization: Hardware accelerated
OpenGL: Enabled
Hardware Protected Video Decode: Unavailable
Rasterization: Hardware accelerated on all pages
Skia Renderer: Enabled
Video Decode: Unavailable
Vulkan: Disabled
WebGL: Hardware accelerated but at reduced performance
WebGL2: Hardware accelerated but at reduced performance
Chrome version: HeadlessChrome/83.0.4103.0
Operating system: Linux 4.13.0-46-generic
2D graphics backend: Skia/83 8ce842d38d0b32149e874d6855c91e8c68ba65a7
Command Line:
/home/wojtas/projects/project-generator/node_modules/puppeteer/.local-chromium/linux-756035/chrome-linux/chrome
--disable-background-networking
--enable-features=NetworkService,NetworkServiceInProcess
--disable-background-timer-throttling
--disable-backgrounding-occluded-windows
--disable-breakpad
--disable-client-side-phishing-detection
--disable-component-extensions-with-background-pages
--disable-default-apps
--disable-dev-shm-usage
--disable-extensions
--disable-features=TranslateUI
--disable-hang-monitor
--disable-ipc-flooding-protection
--disable-popup-blocking
--disable-prompt-on-repost
--disable-renderer-backgrounding
--disable-sync
--force-color-profile=srgb
--metrics-recording-only
--no-first-run
--enable-automation
--password-store=basic
--use-mock-keychain
--headless
--hide-scrollbars
--mute-audio
--disable-web-security
--user-data-dir=/var/www/project-generator/var/chrome-user-data
--allow-file-access-from-files
--no-sandbox
--no-sandbox-and-elevated
--no-zygote
--enable-webgl
--use-gl=desktop
--use-skia-renderer
--enable-gpu-rasterization
--enable-zero-copy
--disable-gpu-sandbox
--enable-native-gpu-memory-buffers
--disable-background-timer-throttling
--disable-backgrounding-occluded-windows
--disable-renderer-backgrounding
--ignore-certificate-errors
--enable-hardware-overlays
--num-raster-threads=4
--default-tile-width=512
--default-tile-height=512
--enable-oop-rasterization
--remote-debugging-port=0
--disable-gpu-compositing
--allow-pre-commit-input 即使我添加了--disable-webgl和--disable-webgl2,仍然在使用VENDOR= 0xffff [Google Inc.], DEVICE=0xffff [Google SwiftShader] *ACTIVE*。
此外:
已通过黑名单、about:flags 或命令行禁用 GPU 合成。浏览器将回退到软件合成,硬件加速将不可用。已禁用的功能:gpu_compositing 已通过黑名单或命令行禁用 WebGL。已禁用的功能:webgl 已通过黑名单或命令行禁用 WebGL2。已禁用的功能:webgl2
通知出现在chrome://gpu页面上
图形特征状态:
Canvas: Hardware accelerated
Flash: Hardware accelerated
Flash Stage3D: Hardware accelerated
Flash Stage3D Baseline profile: Hardware accelerated
Compositing: Software only. Hardware acceleration disabled
Multiple Raster Threads: Enabled
Out-of-process Rasterization: Disabled
OpenGL: Enabled
Hardware Protected Video Decode: Unavailable
Rasterization: Hardware accelerated on all pages
Skia Renderer: Enabled
Video Decode: Unavailable
Vulkan: Disabled
WebGL: Disabled
WebGL2: Disabled发布于 2020-07-09 19:45:58
你真的需要无头模式下的WebGL吗?
如果你删除这个参数..。
--enable-webgl...它应该停止加载SwiftShader并坚持使用GPU。
https://stackoverflow.com/questions/62575117
复制相似问题