مقایسهٔ دقیق کتابخونههای schema validation
خلاصهٔ کاملتر
Schema Benchmarks یه پروژهست که کتابخونههای schema validation (یعنی ابزارهایی که چک میکنن یه داده با شکل مورد انتظار جور هست یا نه) رو مقایسه میکنه. اسمهایی مثل zod، valibot، arktype و typia توشن. ایدهٔ اصلی اینه که هر مرحله از کار جدا اندازه گرفته بشه، نه فقط یه عدد کلی.
اولین معیار حجم bundle هست که برای استفاده توی مرورگر مهمه، چون روی زمان دانلود اثر میذاره. نمونهکدها با Rolldown کامپایل میشن و حجم خروجی، هم با minify و هم بدونش (ولی با tree shaking)، اندازه گرفته میشه. بقیهٔ بنچمارکها پشت سر هم روی یه runner گیتهاب اجرا میشن.
مرحلههای زمان اجرا اینهان: initialization یعنی ساختن خود schema که معمولاً یه بار اتفاق میفته، validation یعنی فقط چک کردن داده، و parsing یعنی چک کردن بهعلاوهٔ برگردوندن یه مقدار جدید با تبدیلهاش. سایت تأکید میکنه که validation و parsing فرق دارن، و هر دو با دادهٔ درست و غلط جدا سنجیده میشن. مثلاً تو valibot این دو تا اینطوریان:
if (v.is(personSchema, data)) {
// data is narrowed to Person
}
const person = v.parse(personSchema, data);تو صفحه چند تا هشدار مهم برای خوندن نتایج اومده. بعضی کتابخونهها موقع دادهٔ غلط خطا throw میکنن، پس بنچمارکشون یه try/catch داره که اثرش معلوم نیست. بعضیها با اولین خطا متوقف میشن (abort early) و طبیعتاً از اونایی که همهٔ خطاها رو جمع میکنن سریعترن. بعضی هم همون آبجکت ورودی رو برمیگردونن بهجای ساختن مقدار جدید. برای همین برچسبهایی مثل JIT (ساختن کد بهینه موقع اجرا با new Function، مثل arktype) و Precompiled (ساختن کد بهینه موقع build، مثل typia) هم نشون داده میشه.
بخشهای دیگه هم هست: سرعت parse از طریق Standard Schema (یه رابط مشترک که بقیهٔ کتابخونهها میتونن بدون کد اختصاصی ازش استفاده کنن)، سرعت codec یعنی تبدیل دوطرفه که با encode و decode یه BigInt به رشته و برعکس تست میشه، و تبدیل schema به JSON Schema برای OpenAPI و خروجی ساختاریافتهٔ LLMها.
تو بخش TypeScript هم بررسی میشه که تایپهای input و output دقیق هستن یا نه، کامپایلر چند تا type instantiation انجام میده و تایپی که ادیتور موقع hover نشون میده چقدر طولانیه.
نکات کلیدی:
- حجم bundle با Rolldown، هم minifyشده و هم بدون minify اندازه گرفته میشه
- initialization، validation و parsing جدا و با دادهٔ درست و غلط سنجیده میشن
- کتابخونههای abort early یا اونایی که همون آبجکت رو برمیگردونن ذاتاً سریعتر دیده میشن
- arktype از JIT با new Function و typia از کد precompiled استفاده میکنه
- codec با تبدیل BigInt به رشته تست میشه و فقط با دادهٔ درست بنچمارک میشه
- کیفیت تایپها با تعداد type instantiation و طول تایپ hover مقایسه میشه




