Lightpanda 1.0 技术解读:用 Zig 从零写一个无头浏览器,16 倍内存优势从哪来

2026 年 10 月 2 日,Lightpanda 发布 1.0.0,两年开发、一万次提交之后摘掉 Beta 标签;随后三周连出 1.0.1(10 月 15 日)与 1.0.2(10 月 23 日)。这个用 Zig 语言实现的浏览器引擎在 GitHub 累计 40055 个 star、单日新增 827 个,重新回到 Trending 前列。它的定位写在 README 第一行:为 AI Agent 和自动化场景构建的无头浏览器(headless browser,指没有图形界面、供程序调用的浏览器),引擎代码与 Chromium、WebKit 均无继承关系。

Lightpanda 官方品牌图

一个动机:每天 2000 万页的 Chrome 舰队养不起

创始人 Francis Bouvier 的前一家公司 BlueBoard(电商数据分析平台,2020 年被 ChannelAdvisor 收购)每天要从 2000 万个网页采集数据,靠一支无头 Chrome 实例舰队撑着。他对这段经历的总结很具体:RAM 和 CPU 开销大,打包和部署难,无头模式用不到的功能占了一大堆。Lightpanda 从这个痛点里长出来,1.0 公告给出的现状是:部分生产客户每天经它取回超过 3000 万个页面,用在 AI Agent、搜索 API、索引和数据提取上。

现代网页离不开 JavaScript 执行。单页应用、无限滚动、即时搜索,静态 HTTP 请求拿到的常是个空壳,所以无头浏览器必须带 JS 引擎。Lightpanda 的取舍是引擎自己写,把资源集中在 JS 与 DOM 上,图形渲染整条管线砍掉。

933 页爬取基准的完整数据

基准方法论公开在 demo 仓库:Go 爬虫(基于 chromedp)爬 Amiibo 演示站全部子页共 933 个 URL,真实走网络;对照浏览器为 Google Chrome 143.0.7499.169;测试机为 AWS m5.xlarge(x86_64)全新 Ubuntu;内存用 smem 统计(计入共享内存页),每 100ms 采样一次取峰值,CPU 用 ps 累计。

官方执行时间对比图

官方内存峰值对比图

README 的头条口径(100 页批次):内存峰值 123MB 对 2GB,约 16 倍差距;执行时间 5 秒对 46 秒,约 9 倍。完整数据表如下(引自 BENCHMARKS.md):

配置耗时内存峰值CPU 占用
Lightpanda 1 进程0:51.6827.2M11.1%
Lightpanda 2 进程0:29.7931.7M26.6%
Lightpanda 5 进程0:11.7043.9M71.6%
Lightpanda 10 进程0:06.7663.7M135.3%
Lightpanda 25 进程0:04.81123.0M204.7%
Lightpanda 100 进程0:05.23410.2M202.8%
Chrome 1 标签页1:22.831.3G124.9%
Chrome 2 标签页0:53.111.3G202.3%

按表中数字换算,单进程对单标签页,Lightpanda 快约 1.6 倍、内存差约 48 倍;差距随并发放大。Chrome 开到两个标签页内存就钉死在 1.3G,Lightpanda 拉到 25 进程、耗时压进 5 秒区间时峰值内存也只有 123M,100 进程也才 410M。它的优势来自横向扩展,单实例对比的差距其实有限,选型时应该按自己的并发形态算这笔账。

砍掉渲染管线,换来什么、失去什么

引擎的组件分工:JS 引擎用 V8(1.0 跟进到 15.5.35.13,与 Chrome、Node.js 同源的最新稳定版),HTML 解析用 Servo 项目的 html5ever,HTTP 栈是 libcurl,其余部分以 Zig 编写。布局计算与绘制整条不做。

收益是内存与速度,代价写进了 Web Platform Tests(WPT,浏览器厂商共用的标准符合度测试套件)成绩单:Lightpanda 通过 1,739,845 个子测试,Chrome 通过 2,184,491 个、Firefox 通过 2,137,997 个(2026 年 9 月 wpt.fyi 数据,引自 1.0 公告),约为 Chrome 的八成。差距的一半以上集中在 CSS、editing、SVG 套件,这些恰恰测试布局与绘制,属于被主动放弃的部分。

增长曲线能看出工程节奏:2024 年 11 月 Beta 发布时只通过 2,645 个子测试;到 2026 年 3 月靠 DOM、HTML、Fetch、URL、cookie、events 补到约 29 万;2026 年 4 月 encoding 套件整体通过,这一个套件就有约 115 万个子测试(大部分是字符映射生成表),总数几天内跳涨;4 月到 9 月再从 workers、Shadow DOM、IndexedDB、XPath、WebSockets、forms 补进约 34 万。每轮结果每日公开在其 WPT dashboard。

为什么是 Zig

选型文章的标题起得坦率:《Why We Built Lightpanda in Zig》,副标题 Because We're Not Smart Enough for C++ or Rust。Bouvier 自述的理由是语言要简单:他写了很多年 Go,浏览器引擎需要系统级性能所以 Go 出局,又想要比 C 更现代的工具链与安全性,Zig 卡在中间。

技术理由有三条。第一,浏览器引擎的内存模式(每页一个生命周期、共享缓存、交叉引用密集的对象图)与 Rust 借用检查器冲突,绕不开就写 unsafe Rust,unsafe 里的裸指针操作并不比 C 好受;Zig 的 allocator 显式传递让「每个页面加载分配一个 arena、结束整块回收」成为自然写法。第二,comptime 元编程在编译期反射 struct,自动生成本地类型到 V8 的绑定代码,替代另一套宏语言。第三,C 互操作是一等公民,libcurl 头文件 @cImport 直接用,缓解 Zig 生态小的短板;V8 是 C++ 写的且无 C API,团队用 Deno 项目 rusty_v8 生成的 C 头文件做桥。全量重编译一分钟内完成。同用 Zig 的项目文中点名了终端模拟器 Ghostty、运行时 Bun、数据库 TigerBeetle 与 GPU 框架 ZML,并提到 Anthropic 收购 Bun 一事作为大厂关注该语言的注脚。

1.0 的门槛:安全模型补齐

转正的两个硬条件,公告里列得明白:真实网站能跑,安全规则与其他浏览器对齐,因为它执行的是你没写过的代码。

CORS(跨源资源共享,服务器用响应头声明哪些外部来源可以读取资源的机制)从 1.0 起默认强制:页面内 fetch() 与 XHR 的跨源请求,服务器未授权就读不到响应。cors/ 套件通过 371/463。对跑在云内网、由 Agent 驱动的无头浏览器,这条规则挡的是恶意页面回读内网服务与已登录会话;CDP 驱动的 page.goto() 不受影响,page.evaluate() 里的跨源 fetch 与 Chrome 同规则。

其余安全项按版本捋:

  • 网络过滤:--block-private-networks 封锁不可路由地址段,1.0.2 扩到 CGNAT、multicast、reserved、NAT64 等段;--block-cidrs 自定义封锁。
  • 跨源重定向剥离 Authorization 头(0.4.0)。
  • iframe、worker、外部样式表默认不加载,--load-resources 显式开启(0.4.0)。
  • Cookie 收紧(0.2.9 至 0.4.1):页面 JS 不可改 HttpOnly cookie,SameSite=Strict 跨站导航保持,Lax 例外仅限安全方法,公共后缀域的 Set-Cookie 拒绝。
  • 解析与协议加固:URL authority 的 CR/LF 注入修复(0.3.1)、WebSocket 帧长整型溢出修复(0.4.1),以及跨版本的数十个 UAF 与双重释放修复。
  • V8 跟随上游版本,页面发来的每行 JS 都由 V8 执行,上游安全补丁随之生效。

接口层:CDP 兼容、原生 MCP、PandaScript

调用方式贴着现有技术栈走:serve 起 CDP(Chrome DevTools Protocol)服务,Puppeteer 把 browserWSEndpoint 指到 ws://127.0.0.1:9222 即可,Playwright、Selenium、chromedp 同理;--protocol webdriver 另有 WebDriver Bidi。包管理器直装也行:pip install lightpanda 或 npm install @lightpanda/browser。

Agent 集成是这一阶段的重点。原生 MCP 服务器 lightpanda mcp 走 stdio 的 JSON-RPC 2.0;加 --port 9223 切到 HTTP,每个连接按 Mcp-Session-Id 路由到独立浏览会话(独立页面、cookie、内存),多个 Agent 互不踩页面,传同一个 ID 则共享上下文,session_new/session_list/session_close 显式管理。run 工具执行 PandaScript 脚本,默认 60 秒超时;脚本结束页面关闭,cookie 与存储保留,登录态跨次复用。

agent 模式(lightpanda agent)用自然语言下指令驱动浏览器,会话产物是 PandaScript:带少量原生浏览器原语的普通 JavaScript,/save 导出后 lightpanda run 确定性重放,运行时不消耗 token。官方设计的用法是用 LLM 做原型、把脚本送上生产环境跑。模型侧支持 Anthropic、OpenAI、Gemini、Vertex、Mistral、Hugging Face、Vercel AI Gateway、OpenRouter、任意 OpenAI 兼容端点与 Ollama、llama.cpp 本地模型,--no-llm 则进纯 REPL。

生态位方面,公告点名 Hermes Agent(Nous Research)将其列为本地浏览器引擎:配置三行,启动时自行拉起 lightpanda serve、每会话一进程,Lightpanda 暂不支持的动作用例自动回落 Chrome。Vercel 的 agent-browser CLI 加 --engine lightpanda 一个参数切换引擎。与 Tencent BrowserSkill 复用已登录浏览器做执行层的思路相反,Lightpanda 从引擎层重写、刻意不带日常浏览器的登录态,专用、隔离、可丢弃。

生产环境的两组读数

Keenable(为 AI Agent 做网页搜索)的技术人员给出的账:超过 35% 的答案依赖动态渲染站点,渲染比读静态 HTML 最多贵 400 倍;换 Lightpanda 后快 4 倍、成本效率优 6 倍。DeveloperHub.io 把预渲染服务从无头 Chrome 迁过来:页面服务快 4 倍(常摸到 6 倍),负载均值降 10 倍,随 Chrome 而来的定时重启与 CPU 告警消失。两组读数出自 1.0 公告引用的客户陈述。

上手五分钟

安装途径:brew install lightpanda-io/browser/lightpanda(Homebrew)、AUR 的 lightpanda-nightly-bin、GitHub nightly 二进制(Linux 与 macOS 的 x86_64/aarch64)、Nix flake、Docker 官方镜像 lightpanda/browser:latest 映射 9222 端口,或官方安装脚本。

console
# 单页取 Markdown
lightpanda fetch --obey-robots --dump markdown https://demo-browser.lightpanda.io/campfire-commerce/

# 结构化数据(JSON-LD / OpenGraph / meta 打成 JSON)
lightpanda fetch --dump structured_data <url>

# 起 CDP 服务,接 Puppeteer / Playwright
lightpanda serve --host 127.0.0.1 --port 9222

边界提前列清:没有图形渲染管线,--dump png/pdf 输出的是 Markdown 排版而非页面像素,真截图需求暂无解;Linux 二进制链接 glibc,x86_64 需 2.35、arm64 需 2.38,Alpine 直接报 cannot execute;无原生 Windows 构建(WSL2 内可用,localhost:9222 自动转发)、无 Android/Termux 支持;遥测默认开启,设 LIGHTPANDA_DISABLE_TELEMETRY=true 关闭;robots.txt 需 --obey-robots 显式尊重。

38 天四个版本的节奏

0.4.1(9 月 15 日)到 1.0.2(10 月 23 日)38 天出了四版。1.0.0 补齐 WebDriver 经典协议、CORS 默认强制与 WebAssembly.compileStreaming 等一批 Web API;1.0.1 加入 Web Locks、Compression Streams、RSA-OAEP;1.0.2 把 Web Crypto 补到 Ed25519、X25519、AES-KW,鼠标事件进入 shadow DOM 与 iframe,--block-private-networks 扩段。WPT 每日运行、结果公开,遇到跑坏的页面开 issue 附上 URL 即可,DeveloperHub.io 迁移前提的两个 issue 都在切换生产环境前修掉了。项目对 1.0 的定义是第一个可承载生产系统的稳定版本,接下来的优先级仍写在原文里:继续补 Web API 覆盖,速度与内存永远优先。


来源:

  • Lightpanda 1.0 官方公告(lightpanda.io/blog/posts/lightpanda-1-0,2026-10-02)
  • Why We Built Lightpanda in Zig(lightpanda.io/blog/posts/why-we-built-lightpanda-in-zig,2025-12-05)
  • GitHub lightpanda-io/browser README 与 1.0.0/1.0.1/1.0.2 Release Notes
  • lightpanda-io/demo 仓库 BENCHMARKS.md(爬虫基准方法学与数据表)