Bun 1.4-এ একটি বিল্ট-ইন WebView API যুক্ত করা হয়েছে যা Playwright বা Puppeteer-এর তুলনায় প্রায় এক-তৃতীয়াংশ RAM ব্যবহার করে headless Chromium বা WebKit চালায়, যা ডেভেলপারদের AI-চালিত scraping এবং browser automation-এর জন্য একটি সাশ্রয়ী বিকল্প প্রদান করে।

Bun 1.4 যা যুক্ত করেছে

এই রিলিজের প্রধান ফিচার হলো Bun.WebView। এটি সরাসরি Bun runtime থেকে Chrome DevTools Protocol প্রকাশ করে, ফলে একজন ডেভেলপার কোনো এক্সটার্নাল npm প্যাকেজ বা driver binaries ইনস্টল না করেই একটি headless browser চালু করতে পারেন। এই API-টি macOS-এ একটি WebKit backend-ও প্রদান করে, যা ব্যবহারকারীদের তাদের কাজের ধরন অনুযায়ী সেরা ইঞ্জিনটি বেছে নেওয়ার সুযোগ দেয়।

মেমরি সাশ্রয় যেভাবে কাজ করে

Playwright বা Puppeteer-এর মাধ্যমে চালু করা একটি পূর্ণাঙ্গ Chromium instance সাধারণ পেজের ক্ষেত্রেও নিয়মিতভাবে 500 MB-এর বেশি resident memory ব্যবহার করে। Bun.WebView "complex pages"-এর ক্ষেত্রে 192 MB থেকে 256 MB রেঞ্জের মধ্যে মেমরি ব্যবহারের রিপোর্ট দেয়। এই হ্রাস মূলত runtime-এর সাথে আরও নিবিড় ইন্টিগ্রেশন এবং browser-টিকে এমন একটি headless mode-এ চালানোর ক্ষমতার কারণে সম্ভব হয়েছে, যা সাধারণ automation টুলগুলোর মতো অনেক ভারী (heavyweight) কম্পোনেন্ট লোড করে না।

রিয়েল-ওয়ার্ল্ড টেস্ট: Claude Code-এর জন্য একটি ছোট JSON API

Simon Willison একটি proof-of-concept তৈরি করেছেন যা Claude Code-কে—একটি LLM যা কোড জেনারেট করতে পারে কিন্তু ক্লিক করতে বা JavaScript রেন্ডার করতে পারে না—একটি পেজ scrape করতে এবং যেকোনো স্ক্রিপ্ট এক্সিকিউট করতে সাহায্য করে। এই সেটআপটি একটি মিনিমাল TypeScript server নিয়ে গঠিত যা:

  1. একটি টার্গেট URL এবং ঐচ্ছিক JavaScript সহ একটি রিকোয়েস্ট গ্রহণ করে।
  2. new WebView({ url }) ইনস্ট্যানশিয়েট করে।
  3. পেজের ভেতরে কোড চালানোর জন্য evaluate(script) কল করে।
  4. ফলাফলটি JSON হিসেবে রিটার্ন করে।

পুরো সার্ভিসটি একটি ছোট কন্টেইনারে অনায়াসেই চলতে পারে, যা সাধারণ scraping কাজের জন্য ব্যবহৃত 1 GB কন্টেইনারের তুলনায় অনেক ছোট। নিচের কোড স্নsnippetটি মূল লজিকটি তুলে ধরে:

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=… রিকোয়েস্ট করতে পারে এবং রেন্ডার করা ডেটা গ্রহণ করতে পারে, যা একটি পূর্ণাঙ্গ browser stack-এর বাড়তি ঝামেলা ছাড়াই কার্যকরভাবে এর সক্ষমতা বাড়িয়ে দেয়।

কখন Bun.WebView ব্যবহার করা যুক্তিযুক্ত

  • Low-memory environments – এজ (edge) বা সার্ভারলেস প্ল্যাটফর্মের জন্য আদর্শ যেখানে RAM অত্যন্ত সীমিত।
  • Cost-sensitive pipelines – একটি LLM agent-এর পাশে একটি লাইটওয়েট কন্টেইনার চালানো অবকাঠামোর খরচ কমিয়ে রাখে।
  • Simple automation – টাইটেল এক্সট্রাকশন, স্ক্রিনশট ক্যাপচার বা সিঙ্গেল-পেজ ফর্ম সাবমিশনের মতো কাজগুলো সরাসরি করা সম্ভব।

এই API-টি ভিজ্যুয়াল টেস্টিং (স্ক্রিনশট ক্যাপচার এবং ডিফারেন্স দেখা) এবং মাল্টি-স্টেপ ফর্ম ফিলিংকেও সাপোর্ট করে, যা ডেভেলপারদের জন্য এটিকে একটি বহুমুখী টুলে পরিণত করেছে—যারা কোনো ভারী ফ্রেমওয়ার্ক ব্যবহার না করেই প্রয়োজনীয় ব্রাউজার ক্ষমতা পেতে চান।

বিবেচ্য বিষয়সমূহ

Bun.WebView একটি নতুন সংযোজন, তাই এর ফিচার সেট Playwright এবং Puppeteer-এর মতো পরিপক্ক ইকোসিস্টেমের তুলনায় কিছুটা পিছিয়ে আছে। অ্যাডভান্সড ব্যবহারের ক্ষেত্রে—যেমন নেটওয়ার্ক ইন্টারসেপশন, মাল্টি-ব্রাউজার অর্কেস্ট্রেশন বা ব্যাপক প্লাগইন সাপোর্ট—এখনও পুরনো টুলগুলোর প্রয়োজন হতে পারে। ডিবাগিংও কিছুটা ম্যানুয়াল, কারণ বিল্ট-ইন API-টি এখনও সেই সমৃদ্ধ ইন্সপেক্টর UI প্রদান করে না যা বড় ফ্রেমওয়ার্কগুলোতে থাকে।

পরবর্তী যা লক্ষ্য রাখতে হবে

কমিউনিটির প্রতিক্রিয়া নির্ধারণ করবে Bun.WebView কত দ্রুত তার সক্ষমতা বৃদ্ধি করবে। শুরুর দিকের ব্যবহারকারীরা সম্ভবত বিভিন্ন র‍্যাপার (wrappers), টেস্টিং ইউটিলিটি এবং ইন্টিগ্রেশন গাইড প্রকাশ করবেন যা প্রতিষ্ঠিত অটোমেশন স্যুটগুলোর সাথে ব্যবধান কমিয়ে আনবে। পারফরম্যান্স টিউন, অতিরিক্ত ব্রাউজার ইঞ্জিন অপশন এবং নিরাপত্তার জন্য প্রয়োজনীয় আপডেট সম্পর্কে জানতে Bun-এর রিলিজ নোটের দিকে নজর রাখুন।

সারকথা: Bun 1.4-এর WebView ডেভেলপারদের headless browsing-এর জন্য একটি হালকা এবং কম মেমরি ব্যবহারের পথ দেখায়, যা সাশ্রয়ী এবং কন্টেইনার-বান্ধব AI-চালিত scraping এবং automation-এর সুযোগ করে দেয়—যদি কাজের ধরনটি এর বর্তমান ফিচারের সীমার মধ্যে থাকে।