同一台 Mac 上的 940 页
同一台 Mac、同一道 940 页、25 路。AginxBrowser 0.6.2 /
cec3741三次冷启动是 52.400 秒、51.568 秒、51.816 秒,峰值 RSS 399–405 MiB,一个进程。2026-10-21 同机:Obscura 0.2.5 是 54.83 秒、199 MiB,一个进程;Lightpanda 1.0.1 是 59.01 秒和 67.76 秒、841 MiB,25 个进程。对手在 10 月 22 日没有重跑。文章里的 4.5 秒是他们的 AWS 表。
Pierre Tachoire 在 2026-10-19 写了 Benchmarking AI-native headless browsers built from scratch。表里是 Lightpanda、Obscura、Moli、Cloudflare Kitesurf。AginxBrowser 不在里面。题目是爬 Amiibo 演示站:从索引页顺着同站链接走完 940 页,并发 25。方法页是他们的 crawler benchmark。索引页要先跑 load.js 才有链接,只读原始 HTML 的客户端看不到下一页。
这篇用他们公开的那道题,在我们这台机器上补一列。数字分成三块:他们机器上的声称、我们同机落盘的回执、我们没跑的。三块不合并。
比的是谁
| AginxBrowser | Lightpanda | Obscura | Moli | Kitesurf | |
|---|---|---|---|---|---|
| 这次跑到的版本 | 0.6.2,cec3741 | 1.0.1 | 0.2.5 | 未跑。他们写的是 1.1.18 | 未跑 |
| 对外接口 | HTTP | CDP、WebDriver、MCP | CDP、MCP | 他们写的是 CDP、WebDriver | 他们写的是经 Browser Run 的 CDP |
| 截图 | 进程内绘制。这次爬取没有请求截图 | README 写没有图形绘制引擎 | 有截图、screencast、PDF | 这次没核对 | 这次没核对 |
| 许可证 | Apache-2.0 | AGPL-3.0 | Apache-2.0 | 他们写的是 Apache-2.0 或 MIT | 闭源 |
Moli 和 Kitesurf 的协议、许可证照他们 2026-10-19 的文章转述。我们没有在这次评测里打开那两个产品。
两套数字,两台机器
| 他们的文章 | 我们的回执 | |
|---|---|---|
| 机器 | 他们写的是 AWS m5.xlarge | 这台 Mac,macOS,arm64 |
| 内存 | Linux smem 的 PSS,共享页拆开算 | ps 的 RSS,大约每 0.1 秒采一次,共享页会重复计算 |
| 日期 | 2026-10-19 | 对手是 2026-10-21。Aginx 0.6.2 是 2026-10-22 |
| 谁驱动 | 他们的爬虫,CDP | Aginx 用 HTTP /session。Lightpanda、Obscura 用官方爬虫的本机 darwin/arm64 构建,chromedp v0.15.1 |
这台 Mac 上量到的
引擎一次只跑一个。代理按回执清掉。Aginx 的全量行把域名限速和会话页数上限都设成 0。默认服务器会在每个域名每分钟 20 页处返回 HTTP 429。0.6.2 / cec3741 的默认限速停在 20 页、已知 204 个 URL、5.971 秒,峰值 RSS 364176 KB。那一行是产品行为,不是下面的成绩。
| 日期 | 引擎 | 形态 | 墙钟 | 峰值 RSS |
|---|---|---|---|---|
| 10-21 | Aginx 0.6.0 3dd366b |
1 个进程,25 个 HTTP 会话 | 88.425s | 414912 KB(405 MiB) |
| 10-22 | Aginx 0.6.2 2426b37 |
同上。stealth + screenshot,TLS chrome145 |
65.827s、62.349s | 416048 KB、417424 KB |
| 10-22 | Aginx 0.6.2 cec3741 |
同上 | 52.400s、51.568s、51.816s | 414416 KB、408208 KB、414752 KB |
| 10-22 | Aginx 0.6.2 9df4dd8 |
同上,外加下面那组 V8 参数。一跑 | 53.402s | 409712 KB |
| 10-21 | Lightpanda 1.0.1 | 25 个进程(--fork) |
59.01s、67.76s | 861184 KB、861712 KB(841 MiB) |
| 10-21 | Obscura 0.2.5 | 1 个进程,25 个 CDP target | 54.83s | 203424 KB(199 MiB) |
对外引用 0.6.2,用 cec3741 那三跑。三跑相差不到 1 秒,940/940,日志里没有 fetch deadline,也没有 loadAmiibo is not defined。采样 CPU 是 17.57 秒、17.75 秒、21.99 秒,含进程启动。0.6.0 那次是 17.03 秒。
Lightpanda 用 chromedp.Nodes。第一次的 CPU 采样写成 0,因为发信号时进程已经退出,这个 0 作废。第二次活着时采到的 CPU 合计是 11.62 秒,是下界。Obscura 用官方的 chromedp.Nodes 没有跑完。完成的 54.83 秒改成轮询 Runtime.evaluate,CPU 11.35 秒。所以 Obscura 这一行和 Lightpanda 的两行不是同一种取链接方式。两边都是 940/940。
10 月 22 日的墙钟低于 10 月 21 日同机的 Obscura 54.83 秒和 Lightpanda 59.01 / 67.76 秒。那两家当天没有重跑,这个顺序只对已落盘的那几次成立。峰值 RSS 仍是大约 400 MiB。Obscura 同机是 199 MiB,Lightpanda 是 841 MiB,而且 Lightpanda 的峰值是 25 个进程加在一起。
这道题的客户端没有请求截图。52 秒里没有画 PNG 的时间。Aginx 的截图由自己的绘制路径完成,不另起 Chrome。那一列这次没有计时。
把 Obscura 的新生代参数拿来跑了一次
Obscura 0.2.5 的命令行在第一个 isolate 之前带 --max-semi-space-size=4 --optimize-for-size。他们的环境变量文档写明,--optimize-for-size 会把 semi-space 收成 1 MiB。我们没有改代码,用 AGINXBROWSER_V8_FLAGS 把同一组参数交给现有的 release 二进制。短启动打出的有效值是 --max-semi-space-size=1,--optimize-for-size 开着,老年代仍是 3072。
这一跑的 /health 是 0.6.2 / 9df4dd8,比 cec3741 多了一次布局树替换。940/940,53.402 秒,采样峰值 409712 KB,结束时 ps 是 409760 KB,CPU 19.40 秒。峰值留在 400 MiB 这一档。这组参数没有把这道题收向 Obscura 的 199 MiB。引用 0.6.2 的墙钟仍用上面的三跑,不用这一跑代替。
他们公布的,留在他们的机器上
下面是文章里的 25 路声称。我们没有在 AWS 上重跑。
| 引擎 | 墙钟 | CPU | 峰值内存 |
|---|---|---|---|
| Lightpanda 1.0.1 | 4.5s | 12s | 109MB PSS |
| Obscura 0.2.5 | 11.5s | 29s | 201MB PSS |
| Moli 1.1.18 | 17.4s | 40s | 230MB PSS |
4.5 秒和这台 Mac 上的 52 秒不是同一条网络、同一块机器,也不能把 RSS 和 PSS 放在一格里比。Kitesurf 闭源,他们转引了 Cloudflare 自己公布的、和 Chrome 对比的数字。那些数字我们没有重跑。
从零写的无头浏览器谁更快
在这台 Mac、这道 940 页上,已落盘的顺序是:Aginx 0.6.2 / cec3741 的 51.6–52.4 秒,Obscura 0.2.5 的 54.83 秒,Lightpanda 1.0.1 的 59.01 秒和 67.76 秒。前一个日期是 10 月 22 日,后两个是 10 月 21 日。Moli 和 Kitesurf 没有出现在这张同机表里。
谁更省内存
同机峰值 RSS 从小到大是 Obscura 199 MiB、Aginx 约 400 MiB、Lightpanda 841 MiB。Aginx 和 Obscura 都是一个进程。Lightpanda 这一行是 25 个进程。我们按 Obscura 的新生代参数再跑一次,峰值仍是 409712 KB。他们文章里的 109MB、201MB、230MB 是另一台机器上的 PSS。
能不能接 Playwright
不能换一个地址就接上。Aginx 的公开接口是 HTTP:/fetch、/screenshot,以及会话上的 navigate、click、eval。公开的 CDP 服务没有做。Lightpanda、Obscura、Moli、Kitesurf 对外都围绕 CDP。这是接口选择。
这篇和 Chrome 的 7.6 倍是一回事吗
不是一道题。README 里对 Chrome 的 7.6 倍是 2026-08-28 的 20 页文本。这篇只比从零写的引擎,而且只比 Amiibo 这 940 页。两套倍数不能写在同一句里。
默认就能这样爬吗
不能。默认每个可注册域名每分钟 20 页,会话还有页数上限。全量 940 页要把 AGINXBROWSER_DOMAIN_RATE_PER_MIN 和 AGINXBROWSER_SESSION_PAGE_LIMIT 都设成 0。429 的正文就是让操作员这么设。产品默认留在 20 页。
这次没跑的
- Moli、Kitesurf、Chrome、Web Platform Tests。
- 1 路和 5 路。
- Obscura 的
chromedp.Nodes。完成的那次是Runtime.evaluate。 - 对手在 10 月 22 日的重跑。同机顺序用的是 10 月 21 日那两家的回执。
- 截图计时。速度表里没有 PNG。
- 站点级的「这个站能开、那个站不能开」。已发表的分项对照在 docs/RECEIPTS.md。
原始 JSON 在仓库的 bench/peer-crawl-20261021/ 和 bench/peer-crawl-20261022/。0.6.0 的全量文件是 aginx-p25.json。0.6.2 的三跑是 aginx-p25-cec-a.json、aginx-p25-cec-b.json、aginx-p25-cec-c.json。新生代那一跑是 aginx-p25-v8flags.json。