上周二晚上,我的爬虫脚本又挂了。killed process 28471 (chrome) total-vm:...,20 个 Puppeteer worker 一起起,服务器 16G 内存直接见底,SSH 都连不上了。我盯着 htop 里那一排 400MB 的 chrome 进程,第一次觉得这东西该换了。
慢。真的太慢了。
headless Chrome 起一个实例要 2 秒,内存吃 200MB 打底,开 20 个 worker 就是 4 个 G。我去搜"无头浏览器内存优化",翻到的帖子全是教人怎么调 --single-process、怎么限制渲染进程数量。说白了,就是给一头大象减肥。
后来在 Hacker News 上刷到一个帖子,有人把 Obscura 推到了前排。说白了,这玩意就是一个用 Rust 从零写的无头浏览器,不需要装 Chromium,自己带渲染引擎,跑 JavaScript 用的是 V8,对外暴露的接口跟 Puppeteer、Playwright 完全兼容。
项目地址:https://github.com/h4ckf0r0day/obscura
我把它和 headless Chrome 简单对比了一下:
| 指标 | Obscura | headless Chrome |
|---|---|---|
| 内存占用 | 30 MB | 200+ MB |
| 二进制大小 | 70 MB | 300+ MB |
| 页面加载 | ~85 ms | ~500 ms |
| 启动时间 | 瞬时 | ~2 秒 |
| 反检测 | 内置 | 无 |

(数据来自官方 README,细节可能有出入——有懂的大佬欢迎指正。)
那你可能要问了,这东西到底怎么装?一行命令:
curl -LO https://github.com/h4ckf0r0day/obscura/releases/latest/download/obscura-x86_64-linux.tar.gz
tar xzf obscura-x86_64-linux.tar.gz
./obscura fetch https://example.com --eval "document.title"
第一次跑的时候我踩了个坑:直接 ./obscura fetch 报了个 permission denied。看了一下 Issue,是 release 包解压后没执行权限,chmod +x obscura 再跑,成了。就这。这个压缩率——算了,先不说这个,你装上跑一遍就懂了。
说实话,这东西也不是完美的。它的渲染引擎是独立实现的,不是 Chromium 的 Blink,所以长尾 CSS、部分 Web API、媒体播放跟 Chrome 有差异。我试了一个重度 SPA 页面,复杂动画的渲染效果跟 Chrome 不完全一样。文档里自己也写了 "may differ from Chromium"。如果是拿它跑复杂的前端自动化测试,建议先在目标页面上试一遍再说。
不过对我来说无所谓。我的场景是 AI agent 抓网页、批量爬数据、截图存证,这些它全都能干。30MB 的内存,同样的服务器,我能开 6 倍的并发。
反正我已经把 obscura scrape 写进定时任务了,服务器内存占用肉眼可见地降了下来。如果你也被 headless Chrome 的内存折磨过,试试看,不亏。
顺便说一句,Cloudflare 那个 agent-first 浏览器 Kitesurf,初版原型就是从 Obscura 移植过去的。Rust 写浏览器引擎这事儿,真的服。
如果你对这类轻量级工具有兴趣,我此前还整理过《2026 年 GitHub 高性能神器排行榜》,关注后回复「工具」获取。
好了,我要去把上周没跑完的爬虫重新跑一遍,回见。