Bun 1.4 内置了 WebView API,可以运行 headless Chromium 或 WebKit,其内存占用仅为 Playwright 或 Puppeteer 的约三分之一,为开发者在进行 AI 驱动的爬虫和浏览器自动化时提供了一个轻量化的选择。

Bun 1.4 新增了什么

本次发布的亮点功能是 Bun.WebView。它直接从 Bun 运行时暴露 Chrome DevTools Protocol,因此开发者无需安装外部 npm 包或驱动二进制文件即可启动 headless 浏览器。该 API 还为 macOS 提供 WebKit 后端,允许用户根据工作负载选择最合适的引擎。

内存节省是如何实现的

通过 Playwright 或 Puppeteer 启动的完整 Chromium 实例即使在处理普通页面时,常驻内存也经常超过 500 MB。而 Bun.WebView 在处理“复杂页面”时,内存占用报告在 192 MB 到 256 MB 之间。这种减少归功于与运行时的紧密集成,以及能够以 headless 模式运行浏览器,从而跳过了通用自动化工具通常需要加载的许多重量级组件。

真实场景测试:为 Claude Code 构建微型 JSON API

Simon Willison 构建了一个概念验证(PoC),让 Claude Code(一种可以生成代码但无法点击或渲染 JavaScript 的 LLM)能够抓取页面并执行任意脚本。该设置包含一个极简的 TypeScript 服务器,其功能如下:

  1. 接收包含目标 URL 和可选 JavaScript 的请求。
  2. 实例化 new WebView({ url })
  3. 调用 evaluate(script) 在页面内运行代码。
  4. 将结果作为 JSON 返回。

整个服务运行在一个足够小的容器中,可以轻松放入小型容器内,远低于通常用于简单爬虫任务的 1 GB 容器。下面的代码片段展示了核心逻辑:

import { WebView } from "bun";

const server = Bun.serve({
  port: 3000,
  async fetch(req) {
    const url = new URL(req.url);
    if (url.pathname === "/scrape") {
      const target = url.searchParams.get("url");
      const script = url.searchParams.get("script") || "return document.title";
      const wv = new WebView({ url: target });
      const result = await wv.evaluate(script);
      return Response.json({ result });
    }
    return new Response("Not found", { status: 404 });
  },
});

Claude Code 现在可以请求 /scrape?url=…&script=… 并接收渲染后的数据,从而在无需完整浏览器栈开销的情况下,有效地扩展了其能力。

何时适合使用 Bun.WebView

  • 低内存环境 —— 非常适合 RAM 资源极其宝贵的边缘计算或 Serverless 平台。
  • 成本敏感型流水线 —— 在 LLM Agent 旁边运行轻量级容器可以降低基础设施成本。
  • 简单自动化 —— 诸如标题提取、截图捕获或单页表单提交等任务开箱即用。

该 API 还支持视觉测试(捕获并对比截图)和多步表单填写,对于只需要适度浏览器能力而不想引入重量级框架的开发者来说,这是一个多功能工具。

需要注意的限制

Bun.WebView 是一个新加入的功能,因此其功能集落后于 Playwright 和 Puppeteer 等成熟的生态系统。高级用例——如网络拦截、多浏览器编排或广泛的插件支持——可能仍需要使用旧工具。调试也更加依赖手动,因为内置 API 目前尚未提供大型框架所捆绑的丰富检查器(inspector)UI。

后续关注点

社区的反应将决定 Bun.WebView 扩展其能力的速度。早期采用者可能会发布封装器(wrappers)、测试工具和集成指南,从而缩小与成熟自动化套件之间的差距。请密切关注 Bun 的发行说明,以了解性能优化、额外的浏览器引擎选项,以及随着 API 广泛使用而变得必要的任何安全性加固。

总结: Bun 1.4 的 WebView 为开发者提供了一条轻量、低内存的 headless 浏览路径,为廉价、容器友好的 AI 驱动爬虫和自动化开启了大门——前提是工作负载能够适配其当前的功能范围。