رجیستری vlt.io متادیتای پکیجها رو ۷۰٪ کوچیکتر کرده
خلاصهٔ کاملتر
تیم vlt تو این پست توضیح داده که رجیستری vlt.io متادیتای پکیجها رو حدود ۷۰٪ کوچیکتر از npmjs.org سرو میکنه. به گفتهی خودشون، نصبها از vlt.io بسته به پکیج منیجر و پروژه بین ۲۰ تا ۷۰ درصد سریعتر شدن. مثلاً تو یه پروژهی Express، زمان نصب با npm از ۱۱.۶ به ۴.۸ ثانیه رسیده. برای کسایی که هزینهی egress رجیستری مثل Artifactory یا Cloudsmith رو میدن، یعنی قبض کمتر.
ماجرا سر packument هست، یعنی فایلی که رجیستری از همهی نسخههای یه پکیج و متادیتاشون نگه میداره. این فایل با هر نسخهی جدید بزرگتر میشه. وقتی lockfile نداری یا پکیج جدید اضافه میکنی، پکیج منیجر باید کل packument رو دانلود کنه. تو نصب تمیز از npmjs.org، packumentها حدود ۴۵٪ حجم دانلود npm و pnpm هستن. مثلاً packument فشردهی @prisma/client حدود ۶.۶۵ مگابایته.
خیلی از فیلدها مثل exports فقط بعد از نصب مهمن و پکیج منیجر اونها رو از package.json داخل tarball میخونه. npm یه نسخهی abbreviated (یعنی خلاصهشده) از packument هم داره، ولی بعضی فیلدهای لازم مثل time و libc رو نداره. برای همین npm اصلاً ازش استفاده نمیکنه و بقیه هم گاهی مجبورن نسخهی کامل رو دوباره بگیرن. time برای قابلیت minimumReleaseAge لازمه.
vlt.io بهطور پیشفرض یه «install packument» میده که فیلدهای لازم برای نصب، از جمله time و license و libc، رو داره. در عوض امضاها، shasum و سند attestation رو حذف میکنه و فقط integrity رو نگه میداره. این رشتههای base64 و hex با gzip فشرده نمیشن، برای همین حذفشون packument نسخهی vite رو از ۳۹۱ کیلوبایت به ۱۰۴ کیلوبایت رسونده. نسخهی کاملش روی npmjs.org حدود ۴.۴۱ مگابایته.
تو تست چهار پروژه، حجم packumentها برای npm از ۱۶۳.۳۹ به ۳۴.۸۰ مگابایت رسیده. pnpm هم روی npmjs.org برای پکیجهایی که تازه منتشر شدن packument کامل رو دوباره میگیره. با تنظیم پیشفرض ۴۷ بار این اتفاق افتاده، ولی روی vlt.io صفر بار، چون time تو همون نسخهی خلاصه هست. یعنی بدون تنظیم اضافه، دانلود تکراری حذف میشه.
برای کلاینت خود vlt یه پارامتر ?stable هم اضافه کردن که نسخههای prerelease رو حذف میکنه. بین ۱۰۰۰ پکیج پرطرفدار، ۵۸.۶٪ نسخهها prerelease هستن. با این روش، حجم packumentهای چهار پروژه از ۱۳۶.۵۷ به ۷.۴۹ مگابایت رسیده. کد بنچمارکها تو ریپوی vlt-registry-packument-size منتشر شده.
نکات کلیدی:
- packumentها تو نصب تمیز از npmjs.org حدود ۲۵ تا ۴۵ درصد حجم دانلودن و روی vlt.io به ۵ تا ۱۵ درصد رسیدن.
- packument نسخهی vite@8.3.3: کامل ۴.۴۱ مگابایت، abbreviated حدود ۳۹۱ کیلوبایت، نسخهی vlt حدود ۱۰۴ کیلوبایت.
- vlt.io فیلدهای time، license و libc رو نگه میداره و امضاها و shasum رو حذف میکنه.
- pnpm روی vlt.io هیچ دانلود تکراری packument کامل نداشته.
- پارامتر ?stable تو کلاینت vlt حجم رو تا ۹۴.۵٪ کم کرده.
- تستها با npm 12.1.0، pnpm 12.6.0، bun 1.4.2 و vlt 1.3.0 انجام شدن.




