Bun 1.4 hadir dengan API WebView terbina dalam yang menjalankan Chromium atau WebKit secara headless menggunakan kira-kira satu pertiga daripada RAM tipikal untuk Playwright atau Puppeteer, memberikan pembangun pilihan yang lebih ringan untuk scraping dipacu AI dan automasi pelayar.

Apa yang ditambah oleh Bun 1.4

Ciri utama dalam keluaran ini ialah Bun.WebView. Ia mendedahkan Chrome DevTools Protocol secara terus daripada runtime Bun, jadi pembangun boleh menjalankan pelayar headless tanpa perlu memasang pakej npm luaran atau binari pemacu. API ini juga menawarkan backend WebKit pada macOS, membolehkan pengguna memilih enjin yang paling sesuai dengan beban kerja mereka.

Bagaimana penjimatan memori berfungsi

Satu instans Chromium penuh yang dilancarkan melalui Playwright atau Puppeteer biasanya melebihi 500 MB memori residen, walaupun untuk halaman yang ringkas. Bun.WebView melaporkan penggunaan dalam julat 192 MB-256 MB untuk "halaman kompleks". Pengurangan ini berpunca daripada integrasi yang lebih erat dengan runtime dan keupayaan untuk menjalankan pelayar dalam mod headless yang melangkau banyak komponen berat yang biasanya dimuatkan oleh alatan automasi generik.

Ujian dunia nyata: API JSON kecil untuk Claude Code

Simon Willison membina bukti konsep yang membolehkan Claude Code—sebuah LLM yang boleh menjana kod tetapi tidak boleh klik atau merender JavaScript—melakukan scraping pada halaman dan melaksanakan skrip rawak. Persediaan ini terdiri daripada pelayan TypeScript minimal yang:

  1. Menerima permintaan dengan URL sasaran dan JavaScript pilihan.
  2. Menginstansiasi new WebView({ url }).
  3. Memanggil evaluate(script) untuk menjalankan kod di dalam halaman.
  4. Mengembalikan hasil sebagai JSON.

Keseluruhan perkhidmatan ini berjalan dalam kontena yang cukup kecil untuk dimuatkan dengan selesa dalam kontena kecil, jauh di bawah kontena 1 GB yang sering digunakan untuk tugas scraping ringkas. Petikan kod di bawah merangkumi logik teras:

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 kini boleh meminta /scrape?url=…&script=… dan menerima data yang telah dirender, secara berkesan meluaskan keupayaannya tanpa bebanan timbunan pelayar (browser stack) yang penuh.

Bilakah Bun.WebView wajar digunakan

  • Persekitaran memori rendah – Ideal untuk platform edge atau serverless di mana RAM adalah terhad.
  • Saluran paip (pipelines) sensitif kos – Menjalankan kontena ringan bersebelahan dengan ejen LLM dapat mengurangkan bil infrastruktur.
  • Automasi ringkas – Tugasan seperti pengekstrakan tajuk, tangkapan skrin, atau penghantaran borang satu halaman boleh berfungsi terus (out of the box).

API ini juga menyokong ujian visual (tangkapan skrin dan perbezaan/diff) serta pengisian borang berbilang langkah, menjadikannya alat serba guna untuk pembangun yang hanya memerlukan kuasa pelayar yang mencukupi tanpa perlu memasukkan rangka kerja (framework) yang berat.

Kekangan yang perlu dipertimbangkan

Bun.WebView adalah penambahan baharu, jadi set cirinya masih ketinggalan di belakang ekosistem matang Playwright dan Puppeteer. Kes penggunaan lanjutan—seperti pintasan rangkaian (network interception), orkestrasi pelbagai pelayar, atau sokongan plugin yang meluas—mungkin masih memerlukan alatan lama. Proses penyahpepijatan (debugging) juga lebih manual, kerana API terbina dalam belum menyediakan UI pemeriksa (inspector UI) yang kaya seperti yang disertakan oleh rangka kerja yang lebih besar.

Apa yang perlu diperhatikan seterusnya

Maklum balas komuniti akan menentukan seberapa cepat Bun.WebView mengembangkan keupayaannya. Pengguna awal berkemungkinan akan menerbitkan pembungkus (wrappers), utiliti ujian, dan panduan integrasi yang boleh merapatkan jurang dengan suite automasi yang sedia ada. Perhatikan nota keluaran Bun untuk penambahbaikan prestasi, pilihan enjin pelayar tambahan, dan sebarang pengukuhan keselamatan yang diperlukan apabila API ini digunakan secara lebih meluas.

Kesimpulannya: WebView Bun 1.4 memberikan pembangun laluan yang ramping dan rendah memori untuk pelayaran headless, membuka pintu kepada scraping dan automasi dipacu AI yang murah dan mesra kontena—asalkan beban kerja tersebut sesuai dengan lingkungan ciri sedia ada.