Bun بهروزرسانی گرفت: پردازش تصویر بومی، HTTP/3 و نصب سریعتر
خلاصهٔ کاملتر
Bun.Image یه API جدید داخلی برای پردازش تصویر سمت سرور هست که دیگه نیازی به نصب ماژولهای native مثل sharp نداری. از فرمتهای JPEG، PNG، WebP، GIF و BMP روی همه پلتفرمها پشتیبانی میکنه؛ HEIC، AVIF و TIFF هم روی macOS و Windows در دسترسن. این API به صورت زنجیرهای (chainable) طراحی شده، یعنی میتونی عملیاتهای مختلف رو پشتسر هم روی یه عکس اعمال کنی:
await Bun.file("photo.jpg")
.image()
.resize(1024, 1024, { fit: "inside" })
.rotate(90)
.webp({ quality: 85 })
.write("thumb.webp");بنچمارکها نشون میدن که Bun.Image در عملیات metadata() حدود ۷۰ برابر سریعتر از sharp هست، و در resize و تبدیل فرمت هم بین ۲۰ تا ۳۸ درصد بهتر عمل میکنه. این سرعت از کرنلهای SIMD با fixed-point، مقیاسگذاری IDCT در JPEG، و مدیریت حافظه بهینه ناشی میشه.
Global Virtual Store یه قابلیت آزمایشی برای سیستم نصب پکیجه که با install.globalStore = true در bunfig.toml فعال میشه. به جای اینکه هر بار همه فایلهای یه پکیج برای هر پروژه کپی بشن، پکیجها یه بار در یه دایرکتوری مشترک ذخیره میشن و پروژهها با symlink بهشون اشاره میکنن. نتیجه؟ روی macOS با APFS، زمان نصب از ~۸۴۱ میلیثانیه به ۱۱۵ میلیثانیه رسیده — یعنی تقریباً ۷ برابر سریعتر در CI.
HTTP/3 (QUIC) حالا به صورت آزمایشی در Bun.serve پشتیبانی میشه. با اضافه کردن http3: true به کنار تنظیمات TLS، سرور همزمان روی TCP (برای HTTP/1.1 و HTTP/2) و UDP (برای HTTP/3) گوش میده. handler موجودت بدون هیچ تغییری روی هر سه پروتکل کار میکنه. بنچمارکها نشون میدن HTTP/3 در مسیرهای static حدود ۵۰۹ هزار درخواست در ثانیه پردازش میکنه، در برابر ~۱۸۹ هزار برای HTTPS/1.1. توجه: این ویژگی هنوز برای production آماده نیست.
fetch() هم حالا به صورت آزمایشی از HTTP/2 پشتیبانی میکنه. چندین درخواست موازی به یه origin از یه connection TLS مشترک استفاده میکنن (multiplexing). میتونی per-request پروتکل رو مشخص کنی:
const res = await fetch("https://example.com", { protocol: "http2" });کلاینت HTTP/2 شامل حفاظتهایی در برابر حملات CONTINUATION flood، HPACK bomb و PING reflection هم هست. همچنین fetch() از HTTP/3 هم پشتیبانی آزمایشی داره و حتی میتونه از طریق هدر Alt-Svc بهطور خودکار به HTTP/3 ارتقا پیدا کنه.
در نهایت، fs.watch() روی Linux، macOS و FreeBSD از نو نوشته شده و مستقیماً با APIهای سیستمعامل (inotify، FSEvents، kqueue) صحبت میکنه. یکی از باگهای مهمی که برطرف شد اینه که در حالت recursive، دایرکتوریهایی که بعد از شروع watch ساخته میشدن دیده نمیشدن — الان این مشکل رفع شده.
نکات کلیدی:
Bun.Imageپردازش تصویر بومی بدون نیاز به نصب ماژول اضافه رو ممکن میکنه- در بنچمارک
metadata()حدود ۷۰ برابر سریعتر از sharp هست - Global Virtual Store نصب پکیج رو تا ۷ برابر در CI سریعتر میکنه (هنوز آزمایشی)
- HTTP/3 هم در سرور و هم در کلاینت fetch به صورت آزمایشی اضافه شده
- کلاینت HTTP/2 در fetch با multiplexing و حفاظتهای امنیتی RFC 9113 اومد
fs.watch()کاملاً بازنویسی شد و باگهای recursive watching رفع شد




