Bun 1.4 มาพร้อมกับ WebView API ในตัวที่รัน headless Chromium หรือ WebKit โดยใช้ RAM เพียงประมาณหนึ่งในสามของที่ Playwright หรือ Puppeteer ใช้ตามปกติ ช่วยให้นักพัฒนาได้ทางเลือกที่คล่องตัวสำหรับการทำ scraping และ browser automation ที่ขับเคลื่อนด้วย AI
สิ่งที่ Bun 1.4 เพิ่มเข้ามา
ฟีเจอร์หลักของการเปิดตัวครั้งนี้คือ Bun.WebView ซึ่งเปิดให้ใช้งาน Chrome DevTools Protocol ได้โดยตรงจาก Bun runtime ทำให้นักพัฒนาสามารถรัน headless browser ได้โดยไม่ต้องติดตั้ง npm packages ภายนอกหรือ driver binaries นอกจากนี้ API ยังมี WebKit backend บน macOS ช่วยให้ผู้ใช้สามารถเลือก engine ที่เหมาะสมกับภาระงาน (workload) ของตนเองได้ดีที่สุด
การประหยัดหน่วยความจำทำงานอย่างไร
การรัน Chromium instance แบบเต็มรูปแบบผ่าน Playwright หรือ Puppeteer มักจะใช้ resident memory เกิน 500 MB แม้จะเป็นหน้าเว็บทั่วไปก็ตาม แต่ Bun.WebView รายงานการใช้งานอยู่ในช่วง 192 MB-256 MB สำหรับ “complex pages” การลดลงนี้เกิดจากการรวมเข้ากับ runtime ที่แน่นแฟ้นยิ่งขึ้น และความสามารถในการรัน browser ในโหมด headless ที่ข้ามส่วนประกอบหนักๆ (heavyweight components) หลายอย่างที่เครื่องมือ automation ทั่วไปมักจะโหลดค้างไว้
การทดสอบในโลกจริง: JSON API ขนาดจิ๋วสำหรับ Claude Code
Simon Willison ได้สร้าง proof-of-concept ที่ช่วยให้ Claude Code ซึ่งเป็น LLM ที่สามารถเขียนโค้ดได้แต่ไม่สามารถคลิกหรือเรนเดอร์ JavaScript ได้ สามารถทำ scraping หน้าเว็บและรันสคริปต์ต่างๆ ได้ โดยการตั้งค่าประกอบด้วย TypeScript server ขนาดเล็กที่:
- รับ request พร้อมกับ target URL และ JavaScript (ถ้ามี)
- สร้าง instance ด้วย
new WebView({ url }) - เรียกใช้
evaluate(script)เพื่อรันโค้ดภายในหน้าเว็บ - ส่งคืนผลลัพธ์เป็น JSON
บริการทั้งหมดนี้รันอยู่ใน container ที่มีขนาดเล็กพอที่จะบรรจุลงใน container ขนาดเล็กได้อย่างสบายๆ ซึ่งต่ำกว่า container ขนาด 1 GB ที่มักใช้สำหรับงาน scraping ง่ายๆ มาก โค้ดด้านล่างนี้แสดงถึงตรรกะหลัก (core logic):
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) ของ browser stack แบบเต็มรูปแบบ
เมื่อไหร่ที่ควรใช้ Bun.WebView
- สภาพแวดล้อมที่มีหน่วยความจำต่ำ (Low-memory environments) – เหมาะสำหรับแพลตฟอร์ม edge หรือ serverless ที่ RAM มีจำกัด
- Pipeline ที่เน้นเรื่องต้นทุน (Cost-sensitive pipelines) – การรัน container น้ำหนักเบาควบคู่ไปกับ LLM agent ช่วยลดค่าใช้จ่ายด้านโครงสร้างพื้นฐาน
- การทำ automation แบบง่าย (Simple automation) – งานอย่างการดึงชื่อหัวข้อ (title extraction), การจับภาพหน้าจอ (screenshot capture) หรือการส่งฟอร์มหน้าเดียว สามารถทำได้ทันที (out of the box)
API นี้ยังรองรับการทดสอบด้านภาพ (visual testing) เช่น การจับภาพหน้าจอและเปรียบเทียบความแตกต่าง (diff screenshots) รวมถึงการกรอกฟอร์มแบบหลายขั้นตอน ทำให้เป็นเครื่องมือที่อเนกประสงค์สำหรับนักพัฒนาที่ต้องการพลังของ browser เพียงพอต่อการใช้งาน โดยไม่ต้องดึง framework หนักๆ เข้ามา
ข้อควรระวังที่ต้องพิจารณา
Bun.WebView เป็นฟีเจอร์ที่เพิ่งเพิ่มเข้ามา ดังนั้นชุดฟีเจอร์ของมันจึงยังตามหลังระบบนิเวศที่สมบูรณ์ของ Playwright และ Puppeteer กรณีการใช้งานขั้นสูง เช่น การดักจับเครือข่าย (network interception), การควบคุมหลายเบราว์เซอร์พร้อมกัน (multi-browser orchestration) หรือการรองรับปลั๊กอินที่หลากหลาย อาจยังจำเป็นต้องใช้เครื่องมือรุ่นเก่า นอกจากนี้การดีบั๊ก (debugging) ยังต้องทำด้วยตัวเองมากกว่า เนื่องจาก API ที่มีมาให้นั้นยังไม่มี UI สำหรับ inspector ที่ครบครันเหมือนกับที่มาพร้อมกับ framework ขนาดใหญ่
สิ่งที่ต้องติดตามต่อไป
การตอบรับจากชุมชนจะเป็นตัวกำหนดว่า Bun.WebView จะขยายความสามารถได้รวดเร็วเพียงใด ผู้ใช้งานกลุ่มแรกๆ มีแนวโน้มที่จะเผยแพร่ wrapper, เครื่องมือทดสอบ และคู่มือการใช้งานร่วมกัน (integration guides) ซึ่งอาจช่วยลดช่องว่างกับชุดเครื่องมือ automation ที่มีอยู่เดิมได้ โปรดติดตามบันทึกการเปิดตัว (release notes) ของ Bun สำหรับการปรับปรุงประสิทธิภาพ, ตัวเลือก browser engine เพิ่มเติม และการเสริมความปลอดภัย (security hardening) ที่จำเป็นเมื่อมีการใช้งาน API นี้อย่างแพร่หลายมากขึ้น
สรุป: WebView ของ Bun 1.4 มอบเส้นทางที่คล่องตัวและใช้หน่วยความจำต่ำสำหรับการทำ headless browsing ให้แก่นักพัฒนา ซึ่งเป็นการเปิดประตูสู่การทำ scraping และ automation ที่ขับเคลื่อนด้วย AI แบบประหยัดและเป็นมิตรกับ container—ตราบใดที่ภาระงานนั้นยังอยู่ในขอบเขตฟีเจอร์ที่มีอยู่ในปัจจุบัน
