Cloudflare เปิด Kitesurf เบราว์เซอร์ที่เขียนใหม่เพื่อ agent โดยเฉพาะ — รันใน V8 isolate ไม่ใช้ Chromium ประหยัดหน่วยความจำ 7 เท่า
เมื่อวันที่ 6 สิงหาคม 2026 Celso Martinho เขียนบนบล็อกของ Cloudflare เปิดตัว Kitesurf — เบราว์เซอร์แบบไร้สถานะที่ออกแบบมาเพื่อ AI agent โดยเฉพาะ จุดที่ทำให้ข่าวนี้ไม่ใช่แค่ “browser API อีกเจ้า” คือ มันไม่ได้เอา Chromium มาห่อใหม่ แต่เป็นเอนจินที่เขียนขึ้นใหม่บน Rust แล้วรันทั้งก้อนอยู่ใน V8 isolate บน Cloudflare Workers
ข้อสังเกตตั้งต้นของบทความตรงและเจ็บ: เบราว์เซอร์ทุกวันนี้ถูกออกแบบมาเพื่อมนุษย์ ไม่ใช่เพื่อโมเดล — “AI doesn’t care about tabs, themes, browser extensions, or synchronization across devices. It cares about token count, context windows, scalability, performance, and costs.” และผลของการฝืนใช้ของเดิมก็คือต้นทุน: เบราว์เซอร์เต็มรูปแบบ “consume so much memory and compute that providing every agent with its own instance is prohibitively expensive” ซึ่งกลายเป็นกำแพงที่ทำให้เว็บส่วนใหญ่เข้าถึงได้เฉพาะ agent ที่ใช้โมเดลแพงที่สุดเท่านั้น
ตัวเลขที่ Cloudflare วางบนโต๊ะ
Cloudflare วัดกับคอร์ปัส 14 URL เทียบกับ Chromium ที่อุ่นเครื่องไว้แล้ว (warm pool) ผลออกมาเป็นการแลกที่ชัดเจนมาก:
| ตัวชี้วัด | Kitesurf | Chromium | ผล |
|---|---|---|---|
| CPU — สกรีนช็อต | 380 ms | 1,173 ms | น้อยกว่า 3.1× |
| CPU — ดึง HTML | 229 ms | 877 ms | น้อยกว่า 3.8× |
| หน่วยความจำ — สกรีนช็อต | 57.8 MiB | 271.0 MiB | น้อยกว่า 4.7× |
| หน่วยความจำ — ดึง HTML | 39.4 MiB | 273.7 MiB | น้อยกว่า 7.0× |
| เวลาจริง — สกรีนช็อต | 1,148 ms | 637 ms | ช้ากว่า 1.8× |
| เวลาจริง — ดึง HTML | 820 ms | 472 ms | ช้ากว่า 1.7× |
อ่านตารางนี้ให้ถูกคือกุญแจของข่าวทั้งชิ้น Kitesurf ช้ากว่าต่อหน้า แต่ถูกกว่าต่อหน้ามาก ถ้าคุณรัน agent หนึ่งตัวแล้วนั่งรอผลอยู่ Chromium ยังชนะ แต่ถ้าคุณรัน agent พันตัวขนานกัน หน่วยความจำที่ต่างกัน 7 เท่าคือความต่างระหว่างเครื่องหนึ่งเครื่องรองรับได้ 4 งานกับ 28 งาน — และนั่นคือโจทย์ที่ Cloudflare ตั้งใจแก้
ข้างในทำงานยังไง — สามชิ้นส่วนที่คุยกันผ่าน RPC
สถาปัตยกรรมแบ่งเป็นสามส่วนที่คุยกันผ่านระบบ RPC ของ Workers เอง:
- Engine — รับคำสั่ง Chrome DevTools Protocol (CDP) และดูแลสถานะของ session
- PageScript — ใช้ฟีเจอร์ Dynamic Workers สร้าง isolate อายุยาวหนึ่งตัวต่อหนึ่งหน้า พร้อม
globalThisที่สะอาด มี DOM document และแซนด์บ็อกซ์สำหรับรัน JavaScript/WebAssembly - PageRenderer — เรนเดอร์เป็นภาพผ่านโมดูล painting ของ Blitz
ไลบรารีที่ประกอบร่างขึ้นมาเป็นของฝั่ง Rust แทบทั้งหมด — Blitz เป็นเอนจินเรนเดอร์แบบโมดูลาร์, Stylo คือตัวแปลง CSS ประสิทธิภาพสูงที่ Firefox ใช้อยู่, Parley ดูแล text shaping ทั้งการเลือก glyph และการตัดบรรทัด ส่วน Boa เป็นเอนจิน ECMAScript ที่รับงาน eval() ในแซนด์บ็อกซ์
รายละเอียดทางวิศวกรรมที่สำคัญที่สุดคือ renderer isolate ถูกฆ่าทิ้งและปลุกใหม่ได้อย่างปลอดภัย เพราะไม่มีสถานะค้าง ทุกครั้งที่โหลดหน้าใหม่คือเริ่มจากศูนย์ นี่ไม่ใช่แค่เรื่องสเกล แต่เป็นเรื่องความปลอดภัยด้วย — การแยก isolate ต่อหน้า และการที่แต่ละส่วนเข้าถึงได้เฉพาะทรัพยากรที่จำเป็น คือรากฐานที่ Cloudflare ยกมาอ้างเรื่อง prompt injection กับ tool safety (แม้บทความจะยังไม่ลงรายละเอียดการป้องกันเป็นข้อ ๆ)
ในแง่ความครบของมาตรฐาน Kitesurf ผ่าน W3C Web Platform Tests มากกว่า 215,000 เคส โดยแข็งในหมวด CSS, DOM, HTML, selection, SVG, XHR และ Streams ซึ่งเป็นกลุ่มที่งาน agent ใช้จริง
ลองใช้ยังไง และอะไรที่มันยังทำไม่ได้
ตอนนี้ Kitesurf เปิด ฟรีในช่วงเบต้า ผ่าน Browser Run โดยมีลิมิตต่อบัญชี วิธีใช้คือชี้ client ที่พูด CDP เป็นอยู่แล้ว — Puppeteer, Playwright, Chrome Remote Interface หรือ MCP server — มาที่ endpoint เดิมแล้วเติมพารามิเตอร์ browser=kitesurf
ต่อผ่าน MCP ด้วย chrome-devtools-mcp:
{
"mcp": {
"kitesurf": {
"type": "local",
"command": [
"npx", "-y", "chrome-devtools-mcp@latest",
"--wsEndpoint=wss://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/browser-run/devtools/browser?browser=kitesurf",
"--wsHeaders={\"Authorization\":\"Bearer <API_TOKEN>\"}"
],
"enabled": true
}
}
}
หรือถ้าอยากได้แค่สกรีนช็อตก้อนเดียวก็ยิง REST ตรง ๆ:
curl -X POST 'https://api.cloudflare.com/client/v4/accounts/<accountId>/browser-run/screenshot?browser=kitesurf' \
-H 'Authorization: Bearer <apiToken>' \
-H 'Content-Type: application/json' \
-d '{"url": "https://example.com"}' \
--output "screenshot.png"
มี playground ให้ลองแบบไม่ต้องเขียนโค้ดที่ kitesurf.cloudflare.app พร้อม Chrome DevTools ฝังมาให้ตรวจดูข้างในได้
สิ่งที่ยังไม่รองรับ Cloudflare เขียนไว้ตรง ๆ และเป็นรายการที่ต้องอ่านก่อนตัดสินใจย้าย: เล่นวิดีโอไม่ได้, WebGL ไม่ได้, ผ่านด่าน bot challenge ที่ตรวจ TLS fingerprint ไม่ได้ และไม่เหมาะกับ session ที่ล็อกอินค้างยาวเกินราว 10 นาที ส่วนแผนโอเพนซอร์สนั้นทีมบอกว่าจะเปิด “once we’re ready — hopefully soon” โดยเป้าหมายคือให้ลูกค้าดีพลอยอินสแตนซ์ของตัวเองบนบัญชีตัวเองได้
มุมมอง AI Curator
สิ่งที่น่าสนใจที่สุดของ Kitesurf ไม่ใช่ตัวเลขเบนช์มาร์ก แต่คือการยอมรับว่าค่าเริ่มต้นของอุตสาหกรรมนี้ผิดมาตลอด สองปีที่ผ่านมา “ให้ agent ใช้เว็บ” แปลว่าเปิด Chrome แบบ headless แล้วส่งภาพหรือ DOM ก้อนใหญ่กลับไปให้โมเดล เราจ่ายค่าเรนเดอร์ฟอนต์ ค่าแอนิเมชัน ค่า compositing และค่าความเข้ากันได้กับเว็บที่พังตั้งแต่ปี 2005 ทั้งหมดนั้น เพื่อสุดท้ายจะดึงข้อความออกมาไม่กี่กิโลไบต์ Kitesurf คือคนแรกที่กล้าตัดชั้นเหล่านั้นทิ้งแล้วยอมรับผลข้างเคียง — ช้าลง ทำ WebGL ไม่ได้ ผ่าน bot challenge ไม่ได้ — เพราะถือว่าคุ้มกับการที่ต้นทุนต่อ agent ลดลงเป็นเท่าตัว
แต่รายการ “ทำไม่ได้” นั้นแหละคือจุดที่ต้องคิดให้ขาด งาน browser automation ในโลกจริงจำนวนมากคือการล็อกอินแล้วทำอะไรสักอย่างในระบบหลังบ้าน ซึ่งชนกับข้อจำกัดเรื่อง session ยาวเกิน 10 นาทีเต็ม ๆ และการผ่าน bot challenge ไม่ได้ก็แปลว่างานประเภทเก็บข้อมูลจากเว็บที่ป้องกันตัวเองอยู่ยังต้องใช้ Chromium ต่อไป คำแนะนำที่ตรงไปตรงมาคือ อย่ามองว่านี่คือของแทน Chromium ให้มองว่าเป็นชั้นที่มาก่อน — ใช้ Kitesurf กับงานอ่าน สรุป ดึงข้อมูล และตรวจหน้าเว็บสาธารณะปริมาณมาก แล้วค่อยส่งต่องานที่ต้องล็อกอินหรือมี interaction หนักไปให้ Chromium ที่แพงกว่า การแบ่งแบบนี้จะเป็นแพตเทิร์นมาตรฐานของปีหน้า
สำหรับทีมไทยและอาเซียน มีสองประเด็นที่ใช้ได้ทันที ข้อแรกคือเรื่องเงิน — สตาร์ตอัปที่ทำ agent ดึงข้อมูลจากเว็บ (เทียบราคา ติดตามคู่แข่ง สรุปข่าว) ทุกวันนี้จ่ายค่า browser pool เป็นสัดส่วนใหญ่ของบิล การลดหน่วยความจำ 7 เท่าเปลี่ยนสมการนั้นจริง และช่วงเบต้าฟรีคือหน้าต่างที่ควรใช้วัดของตัวเองเทียบตรง ๆ ก่อนราคาจะออก ข้อสองที่คนมักมองข้ามคือ เรื่องภาษา — Kitesurf ใช้ Parley ทำ text shaping ซึ่งเป็นชั้นที่ตัดสินว่าภาษาไทย ลาว เขมร และเมียนมาจะเรนเดอร์ถูกหรือไม่ ภาษากลุ่มนี้มีสระบนล่างและวรรณยุกต์ซ้อนที่พังง่ายกว่าภาษาละตินมาก บทความไม่ได้พูดถึงเรื่องนี้เลย ดังนั้นถ้าคุณจะใช้ Kitesurf ทำสกรีนช็อตหน้าเว็บภาษาไทย ให้ทดสอบด้วยหน้าจริงของคุณเองก่อน อย่าเชื่อตัวเลข WPT 215,000 เคสว่าครอบคลุมถึงตรงนั้น เพราะการดึง HTML ล้วนแทบไม่มีความเสี่ยง แต่การเรนเดอร์เป็นภาพมีแน่นอน
แหล่งข่าว
อ่านเพิ่มในหมวด เครื่องมือนักพัฒนา
Betelgeuse รัน Qwen3.8 Flash Next ขนาด 68GB บน RTX 3060 กับแรม 16GB ส่วน Basalt วัดให้เห็นว่าเอนจินที่เร่งด้วยแฟล็กลัดทำให้โมเดลลืมของ
Betelgeuse ฟอร์ก llama.cpp ที่เปิดเมื่อ 31 ต.ค. ดึง expert จาก NVMe เข้า VRAM ตามต้องการ อ้าง 22 tok/s แบบไม่ทิ้ง expert แต่ README เตือนเองว่ายังทดลองและตัวเลขมาจากคนละรอบ วันเดียวกันผู้พัฒนา Basalt เผยผลวัดว่าแฟล็กเร่งความเร็วทำคุณภาพ Q8 ตกไปใกล้ Q2
กฎห้ามโคลนเกมของ Claude Code เริ่มกระทบงานจริง บริษัทรับทำเกมกระดานร้องงานลูกค้าหยุด แต่รายงานหลายชิ้นปนกับตัวกรองไซเบอร์คนละเรื่อง
ต่อจากที่เราพบกฎนี้ในไบนารี Claude Code ผู้ใช้เริ่มรายงานว่างานเชิงพาณิชย์ถูกปฏิเสธ และ Tom's Hardware กับ Mashable หยิบไปรายงาน แต่เมื่อไล่ issue ที่อ้างถึง พบว่าหลายรายการเกิดก่อนกฎจะมา จึงน่าจะเป็นตัวกรองด้านไซเบอร์ ส่วน Anthropic ยังไม่ชี้แจง
Claude Code ส่ง transcript ของ background agent ให้โมเดลทุก ~30 วินาทีเพื่อเขียนสถานะ 3–5 คำ ผู้วัดรายงานกินราว 16% และยังปิดแบบทางการไม่ได้
รายงานอิสระพบว่าฟีเจอร์ agent_summary ของ Claude Code ส่ง transcript เต็มของ background agent ไปถามสถานะทุก ~30 วินาที คิดเป็น 16.4% ของค่าใช้จ่ายในระบบของผู้วัด Issue เปิดมาตั้งแต่ ส.ค. ยังไม่มีสวิตช์ปิดที่รองรับ เราตรวจพบโค้ดนี้ใน 2.1.314 และพบกฎใหม่เรื่องเกมที่ไม่อยู่ใน changelog