《Lightpanda:933 个真实网页峰值内存 123MB,一个不画像素的无头浏览器》
【免费下载链接】browserLightpanda: the headless browser designed for AI and automation项目地址: https://gitcode.com/GitHub_Trending/browser32/browser
当你的服务器上并行的 headless Chrome 实例数逼近内存墙,最先该换的是浏览器,而不是加机器。Lightpanda 是一个用 Zig 从零写的无头浏览器,不基于 Chromium/WebKit,自报基准显示跑 100 个真实网页峰值内存仅 123MB,约为 Headless Chrome 的 1/16。
定位:三步浏览器,砍掉整条渲染管线
一句话架构:取资源 → 建 DOM 树 → 执行 JS,到此为止。布局计算、光栅化、像素绘制全不存在。
这意味着什么:拿不到真实像素截图(CDP 的Page.captureScreenshot返回的是文本式渲染图),布局断言、视觉回归测试这类需求直接出局;换来的是内存和启动成本的量级差。
从 clone 到第一次出 HTML 只要 4 条命令
前置条件:构建需要 Zig 与 Rust 工具链,Zig 版本以 build.zig.zon 声明的最低版本0.17.0为准;V8 引擎默认从源码编译要 10 分钟以上,make download-v8可拉取预编译静态库跳过。
git clone https://gitcode.com/GitHub_Trending/browser32/browser && cd browser make build ./zig-out/bin/lightpanda version ./zig-out/bin/lightpanda fetch --dump html --log-format pretty https://demo-browser.lightpanda.io/campfire-commerce/version打印版本号,fetch输出 JS 执行完成后的页面 HTML;把--dump html换成--dump markdown可直接得到 Markdown。要接 Puppeteer/Playwright,再跑一条./zig-out/bin/lightpanda serve --host 127.0.0.1 --port 9222,客户端把browserWSEndpoint指向ws://127.0.0.1:9222即可。
一张表看懂收益,以及它对你意味着什么
基准条件:AWS EC2 m5.large,经真实网络连续请求 933 个真实网页,以 100 页为统计单位(README.md)。
| 指标(100 个真实页面) | Lightpanda | Headless Chrome | 差距 |
|---|---|---|---|
| 峰值内存 | 123MB | 2GB | 约 1/16 |
| 总耗时 | 5s | 46s | 约 1/9 |
翻译一下:同规格机器可承载的并行实例数约为 Chrome 的 16 倍,每批页面的等待时间缩到约 1/9——在大规模抓取里,省机器比单页快更值钱。数字为项目自报,上线前建议用自己的目标站点集合复测。
三个取舍,每一处都能翻到源码
砍掉渲染,保留资源/DOM/JS:没有 layout 与 paint 阶段,内存大头直接消失。CDP 域实现见 src/server/cdp/domains/(22 个域文件),页面能力止于 DOM 与网络语义。
不造 JS 引擎,复用 V8:通过 Zig 绑定内嵌 V8(src/browser/js/),并把初始化成本前移到编译期——make build会先执行 snapshot_creator 生成src/snapshot.bin,再以-Dsnapshot_path嵌入二进制(Makefile 中build目标依赖build-v8-snapshot),运行时冷启动更短。
不重写解析器,复用 html5ever:HTML 解析用 Rust 组件 html5ever(src/rust/html5ever/),是全部源码中唯一的 Rust 部分,构建期静态链接进二进制;网络层基于 Libcurl(src/network/),CORS、代理、robots.txt 均已实现。
何时用它、何时别用
高并发抓取与 Agent 集群——用:123MB 峰值内存让单机数十个实例成立,配合--obey-robots控制爬取边界。
需要截图留证或布局断言——别用:渲染管线不存在,--dump png给的是文本式渲染而非真实像素。
动态 SPA 内容抽取——用:fetch配合--wait-until、--wait-selector、--wait-script可在水合完成后 dump 结构化内容。
替换既有 Puppeteer 管线里的 Chrome——有限制地用:标准 CDP 服务器默认 9222 端口,通常只需改browserWSEndpoint;但浏览器兼容性验证和视觉回归仍请保留 Chrome。
部署前先看这 4 条
- musl 基础镜像直接起不来:官方二进制链接 glibc,Alpine 系报
cannot execute: required file not found(缺 glibc 动态链接器),基础镜像换debian:bookworm-slim或ubuntu:24.04。 - 遥测默认开启:设
LIGHTPANDA_DISABLE_TELEMETRY=true关闭,爬取时同时加--obey-robots遵守 robots.txt。 - 功能清单仍有未完成项:对照 README.md 的 Status 清单,投产前把目标站点清单全量跑一遍再定版本。
- 动态页面抓早了:dump 时机不受控会拿到 JS 执行前的半成品 DOM,用
--wait-until/--wait-ms/--wait-selector组合控制。
选型结论
Lightpanda 的定位是"量大、并发、只要内容不要像素"的无头浏览器:渲染整体让位,资源集中在网络、DOM 与 JS 执行上;需要像素保真或全量 Web API 兼容时,无头 Chrome 仍是更稳的选择。项目采用 AGPL-3.0 许可,功能状态以 README 清单为准,选型前建议逐项对照。
【免费下载链接】browserLightpanda: the headless browser designed for AI and automation项目地址: https://gitcode.com/GitHub_Trending/browser32/browser
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考