Bun 1.4 همراه با یک API داخلی برای WebView عرضه می‌شود که Chromium یا WebKit را به صورت headless اجرا می‌کند و تقریباً یک‌سوم حافظه RAM مورد نیاز Playwright یا Puppeteer را مصرف می‌کند؛ این ویژگی گزینه‌ای سبک و بهینه را برای استخراج داده (scraping) مبتنی بر هوش مصنوعی و اتوماسیون مرورگر در اختیار توسعه‌دهندگان قرار می‌دهد.

آنچه Bun 1.4 اضافه می‌کند

ویژگی اصلی این نسخه، Bun.WebView است. این ویژگی Chrome DevTools Protocol را مستقیماً از runtime مربوط به Bun ارائه می‌دهد، بنابراین یک توسعه‌دهنده می‌تواند بدون نصب بسته‌های خارجی npm یا فایل‌های باینری درایور، یک مرورگر headless را راه‌اندازی کند. این API همچنین یک بک‌اِند WebKit در macOS ارائه می‌دهد که به کاربران اجازه می‌دهد موتور متناسب با حجم کاری خود را انتخاب کنند.

نحوه عملکرد صرفه‌جویی در حافظه

یک نمونه کامل Chromium که از طریق Playwright یا Puppeteer اجرا می‌شود، حتی برای صفحات معمولی، معمولاً بیش از ۵۰۰ مگابایت حافظه مقیم (resident memory) مصرف می‌کند. در مقابل، Bun.WebView میزان مصرف را برای «صفحات پیچیده» در محدوده ۱۹۲ تا ۲۵۶ مگابایت گزارش می‌دهد. این کاهش مصرف از طریق یکپارچگی بیشتر با runtime و قابلیت اجرای مرورگر در حالت headless حاصل می‌شود که بسیاری از اجزای سنگین مورد نیاز ابزارهای اتوماسیون عمومی را حذف می‌کند.

تست دنیای واقعی: یک API کوچک JSON برای Claude Code

Simon Willison یک اثبات مفهوم (proof-of-concept) ساخته است که به Claude Code — یک LLM که می‌تواند کد تولید کند اما قادر به کلیک کردن یا رندر کردن JavaScript نیست — اجازه می‌دهد یک صفحه را اسکرپ کرده و اسکریپت‌های دلخواه را اجرا کند. این ساختار شامل یک سرور حداقلی TypeScript است که:

۱. درخواستی شامل یک URL هدف و یک JavaScript اختیاری دریافت می‌کند. ۲. یک نمونه از new WebView({ url }) ایجاد می‌کند. ۳. تابع evaluate(script) را برای اجرای کد در داخل صفحه فراخوانی می‌کند. ۴. نتیجه را به صورت JSON بازمی‌گرداند.

کل این سرویس در کانتینری اجرا می‌شود که آن‌قدر کوچک است که به راحتی در یک کانتینر کوچک جای می‌گیرد و بسیار کمتر از کانتینرهای ۱ گیگابایتی است که اغلب برای وظایف ساده اسکرپینگ استفاده می‌شوند. قطعه کد زیر منطق اصلی را نشان می‌دهد:

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=… را ارسال کرده و داده‌های رندر شده را دریافت کند، که این امر به طور موثری قابلیت‌های آن را بدون بار اضافی (overhead) یک پشته کامل مرورگر گسترش می‌دهد.

چه زمانی استفاده از Bun.WebView منطقی است

  • محیط‌های با حافظه کم – ایده‌آل برای پلتفرم‌های edge یا serverless که در آن‌ها RAM بسیار ارزشمند است.
  • خط لوله‌های حساس به هزینه – اجرای یک کانتینر سبک در کنار یک عامل (agent) LLM، هزینه‌های زیرساخت را کاهش می‌دهد.
  • اتوماسیون ساده – کارهایی مانند استخراج عنوان، گرفتن اسکرین‌شات یا ارسال فرم تک‌صفحه‌ای به صورت آماده و بدون تنظیمات اضافی انجام می‌شوند.

این API همچنین از تست بصری (گرفتن اسکرین‌شات و مقایسه تفاوت‌ها) و پر کردن فرم‌های چند مرحله‌ای پشتیبانی می‌کند و آن را به ابزاری همه‌کاره برای توسعه‌دهندگانی تبدیل می‌کند که تنها به قدرت مرورگر نیاز دارند بدون اینکه بخواهند یک فریم‌ورک سنگین را وارد پروژه کنند.

ملاحظاتی که باید در نظر گرفت

Bun.WebView یک افزونه تازه است، بنابراین مجموعه ویژگی‌های آن نسبت به اکوسیستم‌های بالغ Playwright و Puppeteer عقب‌تر است. موارد استفاده پیشرفته — مانند رهگیری شبکه (network interception)، مدیریت چند مرورگر (multi-browser orchestration) یا پشتیبانی گسترده از پلاگین‌ها — ممکن است همچنان به ابزارهای قدیمی‌تر نیاز داشته باشند. عیب‌یابی (Debugging) نیز دستی‌تر است، زیرا API داخلی هنوز رابط کاربری غنیِ Inspector را که در فریم‌ورک‌های بزرگتر وجود دارد، ارائه نمی‌دهد.

آنچه باید در آینده دنبال کرد

پاسخ جامعه کاربری، سرعت گسترش قابلیت‌های Bun.WebView را تعیین خواهد کرد. احتمالاً کاربران اولیه، Wrapperها، ابزارهای تست و راهنماهای یکپارچه‌سازی منتشر خواهند کرد که می‌تواند شکاف موجود با مجموعه‌های اتوماسیون تثبیت‌شده را پر کند. یادداشت‌های انتشار (release notes) Bun را برای بهبودهای عملکردی، گزینه‌های موتور مرورگر اضافی و هرگونه تقویت امنیتی که با گسترش استفاده از این API ضروری می‌شود، دنبال کنید.

خلاصه کلام: WebView در Bun 1.4 مسیری سبک و کم‌مصرف از نظر حافظه را برای مرورگری بدون رابط گرافیکی (headless) در اختیار توسعه‌دهندگان قرار می‌دهد و راه را برای استخراج داده و اتوماسیون مبتنی بر هوش مصنوعیِ ارزان و سازگار با کانتینر باز می‌کند — البته به شرطی که حجم کاری در محدوده ویژگی‌های فعلی آن قرار داشته باشد.