میکرودیف؛ مقایسهی آبجکتها زیر یک کیلوبایت
خلاصهٔ کاملتر
میکرودیف یه کتابخونهی متنبازه که فقط یه کار میکنه: دو تا آبجکت یا آرایه رو میگیره و میگه دقیقاً چی بینشون فرق داره. تو مخزن پروژه اومده که حجم مینیفایشدهش زیر ۱ کیلوبایته، هیچ وابستگیای نداره و تایپهای TypeScript هم داخلش هست. همین سبک بودن باعث شده روی Node، Deno، Bun، مرورگر و حتی سرویسورکرها بدون دردسر اجرا شه.
کل API فقط یه تابع diff()ه. خروجی یه آرایه از تغییراته و هر تغییر یکی از سه نوع CREATE، REMOVE یا CHANGE رو داره. فیلد path مسیر پراپرتی رو بهصورت آرایهای از کلیدها نشون میده (برای آرایهها عدد، برای آبجکتها رشته)، value مقدار جدید یا تغییرکرده رو نگه میداره و oldValue تو نوعهای CHANGE و REMOVE مقدار قبلی رو.
نمونهی سادهش این شکلیه؛ فقط یه پراپرتی به آبجکت دوم اضافه شده و خروجی هم دقیقاً همون یه تغییر رو برمیگردونه:
import diff from "microdiff";
const obj1 = { originalProperty: true };
const obj2 = { originalProperty: true, newProperty: "new" };
console.log(diff(obj1, obj2));
// [{type: "CREATE", path: ["newProperty"], value: "new"}]بهطور پیشفرض ارجاعهای حلقوی پشتیبانی میشن، ولی اگه مطمئنی دادهت حلقه نداره (مثل JSON پارسشده) با آپشن cyclesFix: false میتونی این بررسی رو خاموش کنی و سرعت بیشتری بگیری. تو بنچمارک خود پروژه همین حالت مبنا گرفته شده و deep-diff حدود ۱۹۷٪، deep-object-diff حدود ۲۸۸٪ و jsDiff حدود ۱۵۶۵٪ زمان بیشتری برده. نویسنده خودش میگه این عددها رو باید با احتیاط خوند، چون بنچمارکگیری تو جاوااسکریپت ذاتاً خطا داره.
نکات کلیدی:
- حجم زیر ۱ کیلوبایت، بدون وابستگی، با تایپهای TypeScript داخلی
- کل API یه تابع diff() با خروجی CREATE / REMOVE / CHANGE
- پشتیبانی از new Date() و new RegExp() و ارجاعهای حلقوی
- طبق بنچمارک خود پروژه، بیش از دو برابر سریعتر از کتابخونههای مشابه
- اجرا روی Node، Deno، Bun، مرورگر و سرویسورکر




