buffered-clone: کلون باینری دادههای جاوااسکریپت
خلاصهٔ کاملتر
تو مخزن این پروژه اومده که buffered-clone یه ابزار شبیه structuredClone هست، با این تفاوت که بهجای برگردوندن یه کپی از شیء، همه چیز رو به یه فرمت باینری تبدیل میکنه. هر تایپی که الگوریتم structured clone پشتیبانی میکنه، بهعلاوهٔ ImageData، قابل کدگذاریه و خروجی یه Uint8Arrayه که میشه راحت بین ورکرها یا روی شبکه جابهجاش کرد.
نکتهٔ اصلیش کنترل روی حافظهست. با گزینهٔ buffer میتونی یه ArrayBuffer از پیشساخته یا حتی SharedArrayBuffer بهش بدی تا مستقیم توی همون بنویسه؛ اگه بافر resizable باشه، خودش بزرگش میکنه. مقدار byteLength هم تعیین میکنه هر بار چقدر حافظهٔ اضافه بگیره — هرچی کوچیکتر، مصرف RAM کمتر ولی کدگذاری کندتر، چون دفعات resize بیشتر میشه.
چند گزینهٔ دیگه هم رفتار کدگذاری رو تنظیم میکنن: circular باعث میشه ارجاعها و رشتهها فقط یکبار نوشته بشن، useFloat32 عددها رو بهجای Float64 پیشفرض جاوااسکریپت با دقت ۳۲ بیتی ذخیره میکنه، و useUTF16 رشتهها رو بدون تبدیل به UTF-8 مینویسه که معمولاً سریعتره و با بافرهای اشتراکی هم به مشکل نمیخوره.
استفادهش هم سادهست؛ یه نمونه میسازی و از encode و decodeش استفاده میکنی:
import BufferedClone from 'buffered-clone';
const { encode, decode } = new BufferedClone({
circular: true,
byteLength: 0x1000000,
});
encode(anyCompatibleValue);
decode(ui8a);به گفتهٔ سازنده، وقتی کد گرم شد سرعتش تقریباً به structuredClone نیتیو نزدیک میشه. پشتیبانی از toJSON هم همین الان هست و مکانیزمی شبیه اکستنشنهای MessagePack هم قراره اضافه بشه.
نکات کلیدی:
- تبدیل تایپهای structured clone بهعلاوهٔ ImageData به خروجی باینری
- نوشتن مستقیم توی بافر از پیشرزروشده، SharedArrayBuffer و بافرهای resizable
- گزینههای circular و useFloat32 و useUTF16 برای تنظیم حجم و سرعت
- پشتیبانی از toJSON، و مکانیزمی شبیه MessagePack در راهه




