Bun 1.4 đi kèm với một WebView API tích hợp sẵn, chạy Chromium hoặc WebKit ở chế độ headless với lượng RAM chỉ bằng khoảng một phần ba so với Playwright hay Puppeteer thông thường, mang đến cho các nhà phát triển một lựa chọn tinh gọn để thu thập dữ liệu (scraping) và tự động hóa trình duyệt dựa trên AI.

Những gì Bun 1.4 bổ sung

Tính năng nổi bật nhất của bản phát hành này là Bun.WebView. Nó cung cấp trực tiếp Chrome DevTools Protocol từ runtime của Bun, nhờ đó nhà phát triển có thể khởi chạy một trình duyệt headless mà không cần cài đặt các gói npm bên ngoài hay các tệp thực thi driver. API này cũng cung cấp backend WebKit trên macOS, cho phép người dùng lựa chọn engine phù hợp nhất với khối lượng công việc của mình.

Cách thức tiết kiệm bộ nhớ hoạt động

Một thực thể (instance) Chromium đầy đủ khi chạy qua Playwright hoặc Puppeteer thường xuyên vượt quá 500 MB bộ nhớ resident, ngay cả với các trang web đơn giản. Bun.WebView báo cáo mức sử dụng trong khoảng 192 MB - 256 MB đối với các "trang phức tạp". Sự sụt giảm này đến từ việc tích hợp chặt chẽ hơn với runtime và khả năng chạy trình duyệt ở chế độ headless, giúp bỏ qua nhiều thành phần nặng nề mà các công cụ tự động hóa thông thường vẫn luôn tải lên.

Thử nghiệm thực tế: một JSON API siêu nhỏ cho Claude Code

Simon Willison đã xây dựng một bản thử nghiệm khái niệm (proof-of-concept) cho phép Claude Code—một LLM có thể tạo mã nhưng không thể nhấp chuột hoặc render JavaScript—thu thập dữ liệu từ một trang và thực thi các script tùy ý. Thiết lập này bao gồm một máy chủ TypeScript tối giản thực hiện các bước:

  1. Nhận một yêu cầu với URL mục tiêu và JavaScript tùy chọn.
  2. Khởi tạo new WebView({ url }).
  3. Gọi evaluate(script) để chạy mã bên trong trang.
  4. Trả về kết quả dưới dạng JSON.

Toàn bộ dịch vụ chạy trong một container đủ nhỏ để hoạt động thoải mái, thấp hơn nhiều so với các container 1 GB thường được sử dụng cho các tác vụ scraping đơn giản. Đoạn mã dưới đây tóm tắt logic cốt lõi:

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 });
  },
});

Giờ đây, Claude Code có thể yêu cầu /scrape?url=…&script=… và nhận về dữ liệu đã được render, giúp mở rộng hiệu quả khả năng của nó mà không cần gánh nặng từ một ngăn xếp trình duyệt (browser stack) đầy đủ.

Khi nào nên sử dụng Bun.WebView

  • Môi trường bộ nhớ thấp – Lý tưởng cho các nền tảng edge hoặc serverless nơi RAM là tài nguyên khan hiếm.
  • Các quy trình nhạy cảm về chi phí – Chạy một container nhẹ nhàng song song với một LLM agent giúp giảm thiểu hóa đơn hạ tầng.
  • Tự động hóa đơn giản – Các tác vụ như trích xuất tiêu đề, chụp ảnh màn hình hoặc gửi biểu mẫu trên một trang duy nhất có thể hoạt động ngay lập tức.

API này cũng hỗ trợ kiểm thử hình ảnh (chụp và so sánh sự khác biệt giữa các ảnh chụp màn hình) và điền biểu mẫu nhiều bước, biến nó thành một công cụ linh hoạt cho các nhà phát triển chỉ cần vừa đủ sức mạnh trình duyệt mà không muốn kéo theo một framework nặng nề.

Những lưu ý cần cân nhắc

Bun.WebView là một bổ sung mới, vì vậy bộ tính năng của nó vẫn còn tụt hậu so với các hệ sinh thái trưởng thành như Playwright và Puppeteer. Các trường hợp sử dụng nâng cao—như chặn mạng (network interception), điều phối đa trình duyệt (multi-browser orchestration), hoặc hỗ trợ plugin sâu rộng—có thể vẫn sẽ cần đến các công cụ cũ hơn. Việc gỡ lỗi cũng thủ công hơn, vì API tích hợp sẵn hiện chưa cung cấp giao diện inspector phong phú như các framework lớn hơn.

Điều gì cần theo dõi tiếp theo

Phản ứng của cộng đồng sẽ định hình tốc độ mở rộng khả năng của Bun.WebView. Những người dùng sớm có khả năng sẽ phát hành các wrapper, tiện ích kiểm thử và hướng dẫn tích hợp để thu hẹp khoảng cách với các bộ công cụ tự động hóa đã được thiết lập. Hãy chú ý đến các ghi chú phát hành của Bun để cập nhật các tinh chỉnh hiệu suất, thêm các tùy chọn engine trình duyệt và bất kỳ biện pháp tăng cường bảo mật nào cần thiết khi API được sử dụng rộng rãi hơn.

Kết luận: WebView của Bun 1.4 mang đến cho các nhà phát triển một lộ trình tinh gọn, ít tốn bộ nhớ để duyệt web headless, mở ra cánh cửa cho việc thu thập dữ liệu và tự động hóa dựa trên AI giá rẻ, thân thiện với container—miễn là khối lượng công việc nằm trong phạm vi tính năng hiện tại của nó.