camaro؛ تبدیل سریع XML به JSON تو نود
خلاصهٔ کاملتر
تو معرفی مخزن اومده که camaro یه کتابخانهٔ Node.js برای تبدیل XML به JSONه که بهجای پیادهسازی جاوااسکریپتی، از باندینگ به pugixml استفاده میکنه — یکی از سریعترین پارسرهای XML. کد C++ نوشته شده و به WebAssembly کامپایل شده، پس موقع نصب نیازی به کامپایل دوباره نیست و روی همهٔ پلتفرمهای اصلی کار میکنه. برای استفاده از چند هسته هم یه استخر worker_threads داره.
ایدهٔ اصلیش اینه که تو کل سند رو پارس نمیکنی؛ یه تمپلیت مبتنی بر XPath مینویسی و فقط همون چیزی که لازم داری بیرون میاد، اون هم به شکل یه آبجکت آمادهٔ استفاده. نویسنده میگه دلیل ساختنش دقیقاً همین بوده: معمولاً آدم فقط به بخش کوچیکی از اون همه دادهٔ XML کار داره.
const template = ['players/player', {
name: 'title-case(name)',
jerseyNumber: '@jerseyNumber',
yearOfBirth: 'number(yearOfBirth)',
isRetired: 'boolean(isRetired = "true")'
}]نحو تمپلیت تقریباً همون XPath 1.0 استاندارده، با چندتا اضافهٔ اختصاصی: مسیری که با # شروع بشه یه مقدار ثابته و توابع رشتهای مثل lower-case، title-case، snake-case و string-join هم اضافه شدن که تو XPath 1.0 وجود ندارن. کنار transform یه تابع prettyPrint هم برای مرتبکردن خود XML هست.
بنچمارک مخزن روی یه پاسخ واقعی از API اکسپدیا گرفته شده: camaro v6 حدود ۱۸۳ میکروثانیه در هر تکرار، یعنی حدود ۳ برابر سریعتر از txml، ۱۴ برابر سریعتر از fast-xml-parser و ۲۰ برابر سریعتر از xml2js. خود نویسنده تأکید میکنه این مقایسه به نفع camaro تنظیم شده، چون بقیه کل سند رو پارس میکنن ولی camaro فقط فیلدهای تمپلیت رو. هشدار دومش هم اینه که روی رشتههای XML کوچیک احتمالاً از پیادهسازیهای خالص جاوااسکریپتی کندتره.
نکات کلیدی:
- camaro با pugixml کامپایلشده به WebAssembly کار میکنه، پس نصبش کامپایل نیتیو نمیخواد.
- تمپلیت XPath مشخص میکنه چه فیلدهایی استخراج بشن؛ خروجی مستقیم یه آبجکت جاوااسکریپته.
- توابع اضافهای مثل title-case و snake-case روی XPath 1.0 اضافه شدن.
- تو بنچمارک مخزن تا حدود ۲۰ برابر از xml2js سریعتره، ولی مقایسه کاملاً همتراز نیست.
- برای XMLهای کوچیک ممکنه اصلاً به دردت نخوره و کتابخونههای جاوااسکریپتی بهتر باشن.




