编程 用 Rust 从零写浏览器内核:Moli 默认只取 DOM,内存是 Chrome 的 13%

2026-09-16 01:13:49

用 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、挑战页、登录墙、空响应都不算)。

引擎成功率中位时间中位内存
Moli53.6%1.43 s73 MiB
Chrome Headless52.6%1.43 s773 MiB
Lightpanda44.3%0.97 s40 MiB
Obscura29.7%1.30 s39 MiB

Moli 在成功率上略高于 Chrome Headless(53.6% vs 52.6%),内存只有它的约 1/10(73 MiB vs 773 MiB)。Lightpanda 内存更小,但成功率低 9 个百分点。

测试二:Agent 工作负载

指标MoliChromium
CDP 就绪时间34.85 ms169.37 ms
Episode 活跃中位数33.40 ms57.13 ms
峰值 PSS 内存102.46 MiB348.82 MiB
进程 / 线程数1 / 2411 / 123

CDP 就绪时间快 5 倍,峰值内存约为 1/3,进程数只有 1 个(Chrome 11 个)。

测试三:Lexbench 五引擎对比(1,308 个可比任务)

引擎Lexbench 成功率
Chrome(参考引擎)99.85%
Moli 0.1.181.88%
Kitesurf62.08%
Lightpanda53.29%
Obscura44.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

复制全文 生成海报 Rust 无头浏览器 AI Agent 开源 CDP

推荐文章

程序员茄子在线接单