用 Rust 从零写浏览器内核:Moli 默认只取 DOM,内存是 Chrome 的 13%
项目地址:github.com/lexmount/moli | 语言:Rust | 许可:Apache 2.0 / MIT
Moli 是 Lexmount 团队用 Rust 从零编写的无头浏览器内核,面向 AI Agent 场景。设计哲学一句话:「Structure first. Pixels on demand.」——结构优先,像素按需。默认只取 DOM,不触发布局或绘制;需要截图时才渲染。官方实测内存约为 Chrome 的 13%,CPU 约为 Chrome 的 15%。已开源,可商用。
01 AI Agent 时代的浏览器之痛
2026 年,AI Agent 越来越频繁地替人做一件事:去网页上拿信息、点按钮、填表单。从 Browser-Use 到 CUA,从自动化爬虫到 RAG 内容提取,浏览器成了 AI 基础设施的核心组件。
问题在于,现有浏览器是为「人眼看」设计的,不是为「AI 读」设计的。
人打开网页要的是像素化视觉呈现——排版、字体、颜色、动画缺一不可。所以 Chrome 启动后要维护完整的渲染引擎、GPU 合成器、增量布局树,内存轻松吃掉 700+ MiB。
而 AI Agent 打开网页,90% 的场景只需要拿到页面的结构:DOM 树、文本、链接、属性。它不需要字体渲染,不需要动画,也不需要 GPU 加速。但用传统方案(Chrome Headless + Playwright/Puppeteer),你仍然得开着整个浏览器引擎,就为了取几行文本。Agent 工作负载的实测数据显示,Chrome Headless 峰值内存高达 773 MiB,11 个进程、123 个线程——这还只是一个实例。
能否有一款浏览器,专门为 AI Agent 的「读取」场景优化,而不是为「观看」场景设计?Moli 给出了答案。
02 Moli 是什么
Moli 是一个 production-ready 的无头浏览器,专为 AI Agent 构建。它由 Lexmount 团队开发,用 Rust 从零编写了独立的浏览器内核——不是 Chromium 的包装器,也不是加强版 cURL,而是一个拥有完整 DOM、V8 JavaScript、CSS 级联、网络栈和按需渲染能力的全新浏览器。
Moli 通过 CLI、CDP(Chrome DevTools Protocol)、WebDriver Classic 和 WebDriver BiDi 四种方式使用,支持 Linux、macOS 和 Windows 三大平台。开源版本完全独立可用,无需任何云服务。
03 设计哲学:为什么 AI Agent 需要「结构优先」
Moli 把 Agent 对浏览器的请求抽象为三类,三类请求的成本完全不同:
| Agent 请求类型 | Moli 怎么做 | 资源消耗 |
|---|---|---|
| 提取 HTML/Markdown、查询 DOM、执行 JS、检查网络/存储 | 直接读取运行时状态,不触发布局或绘制 | 极低 |
| 读取元素坐标、命中测试、模拟鼠标点击输入 | 运行一次布局计算,保留最新冻结布局树 | 中 |
| 截图、录屏帧 | 从当前 DOM/Style 重建,渲染新鲜帧,用后即弃 | 高(按需触发) |
绝大多数 Agent 请求(提取文本、DOM 查询、JS 执行)根本不需要布局和绘制。Moli 把原生 DOM + Stylo 样式状态作为唯一事实来源,只有遇到几何坐标或像素输出时才按需构建,且构建完就把工作区全部丢弃,绝不长期维护。
请求处理的流程是:DOM 优先(默认路径),布局和绘制仅在需要时按需构建、用完即弃。带来的直接好处是,默认情况下 Moli 甚至不花时间去布局和绘制。只有加上 --layout 参数,它才启动完整盒子构造、Taffy 布局、Parley 文本布局和命中测试系统。这是它在内存和 CPU 上大幅领先 Chrome 的根本原因——不是「优化得好」,而是「压根不做多余的事」。
04 能力全景:一个「完整」的浏览器
「结构优先」不意味着功能残缺。Moli 具备一个完整浏览器所需的能力:
- 完整 Web 运行时: 流式 HTML 解析、原生 DOM 树、V8 JavaScript 引擎(支持模块、定时器、微任务、事件循环)、iframe 和 Web Worker、CSS 级联与计算样式、Fetch/XHR/WebSocket、Cookie、WebCrypto、localStorage、IndexedDB、OPFS(专用文件系统)。
- 提取优化的输出: CLI 直接输出 HTML、Markdown、JSON、语义文本树(semantic tree text,专为模型优化),以及帧感知序列化。支持选择器等待、脚本等待、响应等待和网络追踪。
- 统一的自动化二进制: CDP、WebDriver Classic、WebDriver BiDi 三种协议共享同一内核和调度器,无需额外安装 ChromeDriver、geckodriver 或独立的浏览器——一个二进制全部搞定。
- 按需真实视觉: 通过
--layout启用完整盒子构建、Taffy 布局、Parley 文本布局、布局支持的命中测试与坐标输入、视口截图、低频率 CPU 渲染的 DevTools 屏幕帧。 - 可控的运行选项: Profile、Cookie、HTTP 缓存、代理、资源族(图片/字体/音频/视频分别控制)、连接数限制、超时、私有网络策略、User-Agent 覆盖、结构化日志、网络诊断。
成本控制哲学是「显式 opt-in」:LayoutPolicy::Mock 是默认策略,提供确定性几何但不做真实布局或绘制;--layout 开启按需布局;--resource 才拉取图片字体等可选资源。昂贵操作需要你明确说「我要」,而不是默认开启。
05 性能实测:数据不说谎
Moli 团队在 WPT、Lexbench 和真实网页爬虫三个维度做了测试。以下数据来自项目官方报告。
测试一:真实网页抓取(192 个公共 URL)
覆盖国内外主流网站,页面只有产生有意义内容才算成功(HTTP 200、挑战页、登录墙、空响应都不算)。
| 引擎 | 成功率 | 中位时间 | 中位内存 |
|---|---|---|---|
| Moli | 53.6% | 1.43 s | 73 MiB |
| Chrome Headless | 52.6% | 1.43 s | 773 MiB |
| Lightpanda | 44.3% | 0.97 s | 40 MiB |
| Obscura | 29.7% | 1.30 s | 39 MiB |
Moli 在成功率上略高于 Chrome Headless(53.6% vs 52.6%),内存只有它的约 1/10(73 MiB vs 773 MiB)。Lightpanda 内存更小,但成功率低 9 个百分点。
测试二:Agent 工作负载
| 指标 | Moli | Chromium |
|---|---|---|
| CDP 就绪时间 | 34.85 ms | 169.37 ms |
| Episode 活跃中位数 | 33.40 ms | 57.13 ms |
| 峰值 PSS 内存 | 102.46 MiB | 348.82 MiB |
| 进程 / 线程数 | 1 / 24 | 11 / 123 |
CDP 就绪时间快 5 倍,峰值内存约为 1/3,进程数只有 1 个(Chrome 11 个)。
测试三:Lexbench 五引擎对比(1,308 个可比任务)
| 引擎 | Lexbench 成功率 |
|---|---|
| Chrome(参考引擎) | 99.85% |
| Moli 0.1.1 | 81.88% |
| Kitesurf | 62.08% |
| Lightpanda | 53.29% |
| Obscura | 44.88% |
Chrome 作为参考引擎达到 99.85%,Moli 0.1.1 以 81.88% 的成功率排名第二,领先 Kitesurf、Lightpanda 和 Obscura。对一个首个正式版本来说,这个成绩相当亮眼。
测试四:效率地图——CPU 和内存
- Moli: 中位 CPU 时间 100.6 ms,中位峰值内存 92 MiB
- Chrome: 中位 CPU 时间 687 ms,中位峰值内存 697 MiB
Moli 的 CPU 时间只有 Chrome 的 15%,峰值内存只有 Chrome 的 13%。在保持 80%+ 成功率的同时把内存和 CPU 压到 Chrome 的十分之一左右,在这个象限里,Moli 是唯一一个既保持高成功率、又保持低资源消耗的引擎。
此外,Moli 在 WPT(Web Platform Tests)中单次全量跑过 161.2 万个测试用例,验证了其对 Web 标准的兼容性达到了相当可用的水平。
06 快速上手:一条命令装好
安装支持三大平台。
Linux / macOS:
curl --proto '=https' --tlsv1.2 -fsSL \
https://github.com/lexmount/moli/releases/latest/download/moli-installer.sh | sh
Windows(PowerShell):
irm https://github.com/lexmount/moli/releases/latest/download/moli-installer.ps1 | iex
装好之后,看看能做什么。
提取页面为 Markdown:
moli fetch --dump markdown --wait-until done https://example.com
输出「模型友好」的语义树:
moli fetch --dump semantic_tree_text --wait-selector body https://example.com
截图 / 全页截图 / PDF:
moli fetch --layout --dump screenshot https://example.com > page.png
moli fetch --layout --dump screenshot_full https://example.com > full-page.png
moli fetch --layout --dump pdf https://example.com > page.pdf
启动自动化服务器(CDP/WebDriver 三合一):
# DOM 优先的基础自动化
moli serve
# 开启真实几何、坐标输入、截图能力
moli serve --layout
# 再加上图片、字体、视频等完整资源
moli serve --layout --resource
同一个端口同时支持 CDP、WebDriver Classic 和 WebDriver BiDi。Playwright 可以直接连:
// Playwright 直接连接 Moli CDP
import { chromium } from "playwright";
const browser = await chromium.connectOverCDP("http://127.0.0.1:9222");
const context = browser.contexts()[0];
const page = context.pages()[0] ?? await context.newPage();
await page.goto("https://example.com");
console.log(await page.locator("body").innerText());
await browser.close();
Moli 能渲染真实页面,包括 HTML5 游戏和 rust-lang.org,并可以通过 Chrome DevTools 实时检查 DOM、CSS 和几何信息。
07 架构:一个「用完即弃」的浏览器内核
Moli 不是 Chromium 的壳,而是用 Rust 从零写的独立浏览器内核。核心依赖栈:
- libcurl — 网络传输与多请求运行时
- html5ever — 流式 HTML 解析
- rusty_v8 / V8 — JavaScript 执行引擎
- Servo / Stylo — CSS 选择器、级联、计算样式(来自 Mozilla Servo 项目)
- Taffy + Parley — 盒模型与文本布局
- AnyRender / Vello CPU、usvg、Rust 图像生态 — 纯软件渲染
设计精髓在于 FrozenLayoutTree(冻结布局树):
每次真实刷新:从 DOM/Style 构建临时工作树 → 产出新鲜绘制快照 → 把规范几何冻结为紧凑的 FrozenLayoutTree → 丢弃工作树、样式借用、布局缓存、诊断信息、绘制状态。查询时从冻结树中推导来源查找和命中测试候选。
系统没有增量维护的布局树、没有损伤图(damage graph)、没有保留的显示列表(retained display list)、没有 GPU 合成器、没有持久窗口。
也就是说,Moli 不「养着」一个渲染引擎,只在需要的时候临时请出来做一件事,做完就丢掉。
08 项目边界与许可
Moli 团队对项目边界写得比较直接:
- 不做 GUI 浏览器、持久窗口、GPU 合成器、保留的多帧绘制架构
- 不追求与 Chrome 像素级对齐
- 不支持高保真 Canvas / WebGL / 媒体播放
- 不支持的协议路径返回明确错误,不假装「做了但没做」
在 Agent 浏览器这个细分场景下,Moli 已经达到生产可用水平,且仍在积极开发中。
许可方面:Apache 2.0 / MIT 双许可,商用友好。
09 总结
Moli 的开源不是又一个「用 Rust 重写 XX」。它指向的是一个更具体的变化:浏览器正在从「给人看」转向「给 AI 用」。
当大部分 Agent 任务只需要结构和语义时,「按需渲染、用完即弃」的成本模型比「全时全量渲染」更划算。Moli 用 13% 的内存和 15% 的 CPU 实现了 81.9% 的 Lexbench 成功率,这个效率/能力比在 AI 基础设施领域有实际意义——无论是 Browser-Use 类 Agent 框架、RAG 内容流水线、AI 训练数据采集,还是大规模网页自动化评估,都多了一个可选方案。
项目信息:Moli — Production-ready headless browser for AI agents | GitHub:github.com/lexmount/moli | Rust、Headless Browser、AI Agent、Open Source、CDP、WebDriver