Puppeteer自动化的性能优化与执行速度提升


前言

最近随着复杂的自动化任务的增加,robot 项目出现了很多问题,经常要人工智能,在上次清远漂流的时候,就是经常报警,而且基本都是我人工智能解决的,厉害吧 ????。

这些问题包括:经常卡住,运行慢、卡,浏览器关不掉,CPU 和 内存 经常是满载运行的,特别是 CPU ,经常是 99% 的使用率。

Chromium 消耗最多的资源是 CPU,一是渲染需要大量计算,二是 Dom 的解析与渲染在不同的进程,进程间切换会给 CPU 造成压力(进程多了之后特别明显)。

其次消耗最多的是内存,Chromium 是以多进程的方式运行,一个页面会生成一个进程,一个进程占用 30M 左右的内存,大致估算 1000 个请求占用 30G 内存,在并发高的时候内存瓶颈最先显现。

优化最终会落在内存和 CPU 上(所有软件的优化最终都要落到这里),通常来说因为并发造成的瓶颈需要优化内存,计算速度慢的问题要优化 CPU。

所以这篇文章,我们谈谈如何优化Puppeteer的性能优化与执行速度。

Headless Chrome ,无头模式,浏览器的无界面形态,可以在不打开浏览器的前提下,在命令行中运行测试脚本,能够完全像真实浏览器一样完成用户所有操作,不用担心运行测试脚本时浏览器受到外界的干扰,也不需要借助任何显示设备,使自动化测试更稳定。

优化点

优化 Chromium 启动项

  1. 如果将Dom解析和渲染放到同一进程,肯定能提升时间(进程上下文切换的时间)。对应的配置是 single-process

  2. 部分功能 disable 掉,比如 GPU、Sandbox、插件等,减少内存的使用和相关计算。

代码如下:

const browser = await puppeteer.launch(
{
    headless:true,
    args: [
  ‘–disable-gpu’, // GPU硬件加速
  ‘–disable-dev-shm-usage’, // 创建临时文件共享内存
  ‘–disable-setuid-sandbox’, // uid沙盒
  ‘–no-first-run’, // 没有设置首页。在启动的时候,就会打开一个空白页面。
  ‘–no-sandbox’, // 沙盒模式
  ‘–no-zygote’,
  ‘–single-process’ // 单进程运行
    ]
});

优化Chromium执行流程

接下来我们再单独优化 Chromium 对应的页面。

每次请求都启动 Chromium,再打开 tab 页,请求结束后再关闭 tab 页与浏览器。

流程大致如下:

请求到达 -> 启动

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值