Cloudflare Worker 已经支持了 Puppeteer 无头浏览器渲染了,它可以用于创建屏幕截图、抓取页面和测试 Web 应用程序等任务,
developers.cloudflare.com略有不同的是,Cloudflare fork 了 Puppeteer 代码做了一些修改,关键代码在这里:
github.com,看完逻辑大概能 get 到他们优化的策略:
1)首先在云端预热一批 Chrome/Chromium 会话窗口,有点类似 Serverless Function 的冷启动
2)每次发起 Puppeteer 任务的时候,会通过 API 从会话池中获取一个 ws 连接地址,这块工作在框架和工具层面做了完善的处理(网页上配置不了,需要走 CLI)
3)云端对回话窗口池进行自动伸缩容管理,同时也会对获取 ws 连接的任务做队列管理
这样的架构设计可以很好地保障整体服务的稳定。目前一个账户 1min 内可以启动 2 个实例,并发数也只有 2,而且超过 60s 任务没结束被 kill。为了避免长时间占用资源,还是做了比较多的限制。
当前这个能力还在 beta 阶段,可以通过官网加入到 waitlist,不过我发现,直接进 discord 找他们的运营可以快速获取权限。