يأتي Bun 1.4 مع واجهة برمجة تطبيقات WebView مدمجة تقوم بتشغيل Chromium أو WebKit في وضع headless (بدون واجهة رسومية)، مستهلكةً حوالي ثلث ذاكرة الوصول العشوائي (RAM) المعتادة في Playwright أو Puppeteer، مما يمنح المطورين خياراً رشيقاً لعمليات كشط البيانات (scraping) المدعومة بالذكاء الاصطناعي وأتمتة المتصفح.
ما يضيفه Bun 1.4
الميزة الأبرز في هذا الإصدار هي Bun.WebView. فهي تتيح بروتوكول Chrome DevTools Protocol مباشرة من بيئة تشغيل Bun، مما يسمح للمطور بتشغيل متصفح headless دون الحاجة لتثبيت حزم npm خارجية أو ملفات تعريف التشغيل (driver binaries). كما توفر واجهة برمجة التطبيقات محرك WebKit على macOS، مما يتيح للمستخدمين اختيار المحرك الذي يناسب أعباء عملهم بشكل أفضل.
كيف يتم توفير الذاكرة
تتجاوز نسخة Chromium كاملة يتم تشغيلها عبر Playwright أو Puppeteer عادةً 500 ميجابايت من الذاكرة المقيمة (resident memory)، حتى بالنسبة للصفحات البسيطة. بينما تسجل Bun.WebView استهلاكاً يتراوح بين 192 ميجابايت و256 ميجابايت لـ "الصفحات المعقدة". يأتي هذا الانخفاض نتيجة التكامل الوثيق مع بيئة التشغيل والقدرة على تشغيل المتصفح في وضع headless الذي يتخطى العديد من المكونات الثقيلة التي تبقيها أدوات الأتمتة العامة محملة في الذاكرة.
اختبار من الواقع: واجهة برمجة تطبيقات JSON صغيرة لـ Claude Code
قام Simon Willison ببناء نموذج إثبات مفهوم يسمح لـ Claude Code — وهو نموذج لغوي كبير (LLM) يمكنه إنشاء الكود ولكنه لا يستطيع النقر أو عرض JavaScript — بكشط صفحة وتنفيذ برمجيات عشوائية. يتكون الإعداد من خادم TypeScript بسيط يقوم بما يلي:
- يستقبل طلباً يحتوي على رابط URL مستهدف وJavaScript اختياري.
- يقوم بإنشاء مثيل
new WebView({ url }). - يستدعي
evaluate(script)لتشغيل الكود داخل الصفحة. - يعيد النتيجة بتنسيق JSON.
تعمل الخدمة بأكملها داخل حاوية (container) صغيرة بما يكفي لتناسب بسهولة حاوية صغيرة، وهي أقل بكثير من الحاويات التي تبلغ سعتها 1 جيجابايت والتي تُستخدم غالباً لمهام الكشط البسيطة. يوضح مقتطف الكود أدناه المنطق الأساسي:
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=… واستلام البيانات المعروضة، مما يوسع قدراته فعلياً دون العبء الإضافي لمجموعة متصفحات كاملة.
متى يكون استخدام Bun.WebView منطقياً
- بيئات الذاكرة المنخفضة – مثالية لمنصات edge أو المنصات عديمة الخادم (serverless) حيث تكون الذاكرة (RAM) مورداً ثميناً.
- خطوط المعالجة الحساسة للتكلفة – تشغيل حاوية خفيفة الوزن بجانب وكيل LLM يحافظ على انخفاض فواتير البنية التحتية.
- الأتمتة البسيطة – مهام مثل استخراج العنوان، أو التقاط لقطات الشاشة، أو إرسال النماذج من صفحة واحدة تعمل مباشرة دون إعدادات معقدة.
تدعم واجهة برمجة التطبيقات أيضاً الاختبار البصري (التقاط لقطات الشاشة والمقارنة بينها) وتعبئة النماذج متعددة الخطوات، مما يجعلها أداة متعددة الاستخدامات للمطورين الذين يحتاجون فقط إلى قدر كافٍ من قوة المتصفح دون استدعاء إطار عمل ثقيل.
تحذيرات يجب مراعاتها
تُعد Bun.WebView إضافة حديثة، لذا فإن مجموعة ميزاتها لا تزال متأخرة عن الأنظمة البيئية الناضجة لـ Playwright و Puppeteer. قد لا تزال حالات الاستخدام المتقدمة — مثل اعتراض الشبكة (network interception)، أو تنسيق المتصفحات المتعددة، أو دعم الإضافات الواسع — تتطلب الأدوات الأقدم. كما أن عملية تصحيح الأخطاء (debugging) يدوية أكثر، حيث لا توفر واجهة برمجة التطبيقات المدمجة بعد واجهة فاحص (inspector UI) غنية كما هو الحال في أطر العمل الأكبر.
ما الذي يجب ترقبه لاحقاً
سيحدد رد فعل المجتمع مدى سرعة توسع Bun.WebView في قدراتها. من المرجح أن ينشر المستخدمون الأوائل أدوات تغليف (wrappers)، وأدوات اختبار، وأدلة دمج قد تسد الفجوة مع مجموعات الأتمتة الراسخة. ابقَ على اطلاع بملاحظات إصدار Bun للحصول على تحسينات الأداء، وخيارات محركات المتصفح الإضافية، وأي تعزيزات أمنية تصبح ضرورية مع اتساع نطاق استخدام واجهة برمجة التطبيقات.
الخلاصة: توفر Bun 1.4 WebView للمطورين مساراً رشيقاً ومنخفض الذاكرة للتصفح بدون واجهة (headless browsing)، مما يفتح الباب لعمليات كشط وأتمتة مدعومة بالذكاء الاصطناعي، وتكون رخيصة ومتوافقة مع الحاويات — بشرط أن يتناسب عبء العمل مع نطاق ميزاتها الحالي.
