zod-compiler: اعتبارسنجی Zod تا ۷۵ برابر سریعتر
خلاصهٔ کاملتر
پروژهٔ zod-compiler یه ابزاره که اسکیماهای Zod رو موقع بیلد (build time) به توابع اعتبارسنجیِ بهینه و بدون سربار تبدیل میکنه. ادعای اصلیش اینه که اعتبارسنجی رو ۲ تا ۷۵ برابر سریعتر میکنه، بدون اینکه لازم باشه کدت رو عوض کنی؛ یعنی همون اسکیماهای Zodی که داری رو نگه میداری. طبق توضیحات، این ابزار توی پروژههای بزرگ با دهها هزار اسکیما هم تست شده.
سه راه برای استفاده ازش هست. توی حالت خودکار (پیشفرض)، پلاگین موقع بیلد همهٔ اسکیماهای Zodی که export شدن رو خودش پیدا و کامپایل میکنه؛ لازم نیست هیچ رَپری بذاری یا چیزی از zod-compiler توی کد سورست import کنی. فایل اسکیمات دستنخورده و خالص Zod میمونه:
export const CreateUserSchema = z.object({
name: z.string().min(1).max(100),
email: z.email(),
role: z.enum(["admin", "editor", "viewer"]),
});برای اجرای این کار، پلاگین موقع بیلد هر فایلی که از zod import کرده رو پیدا میکنه، فایلهایی که قطعاً اسکیما نیستن رو پیشفیلتر و رد میکنه، بقیه رو اجرا میکنه تا اسکیماها رو تشخیص بده، و بعد هر اسکیما رو به یه اعتبارسنجِ بهینه تبدیل میکنه که بهشکل یه IIFE قابل tree-shake جایگزین میشه.
نکتهٔ مهم اینه که کل API زود حفظ میشه. متدهای بهینهشدهٔ parse، safeParse، parseAsync و safeParseAsync مستقیم روی همون شیء اسکیمای اصلی نصب میشن، پس هویت اسکیما ثابت میمونه و چیزهایی مثل .shape، instanceof، .meta() و z.toJSONSchema() همه سر جاشون کار میکنن. برای همین کتابخونههایی مثل tRPC، Hono و React Hook Form بدون تغییر کار میکنن. علاوه بر این، یه گارد بولی به اسم .is(input) هم اضافه میشه که ارزونترین راه برای چک کردن «این داده با اسکیما جوره یا نه؟» هست و جایگزین تمیزی برای schema.safeParse(x).success محسوب میشه.
اگه ترجیح بدی صریحتر کار کنی، میتونی با تابع compile() فقط اسکیماهای خاصی رو دستی wrap کنی؛ توی حالت dev اینها به اعتبارسنجی زماناجرای Zod برمیگردن و بعد از بیلد از کد بهینهٔ AOT استفاده میکنن. یه راه سوم هم CLI هست که بدون باندلر، فایلهای اعتبارسنجی بهینه رو از خط فرمان تولید میکنه.
یه قابلیت دیگهش hoisting هست که پیشفرض روشنه. اسکیماهایی که داخل بدنهٔ توابع ساخته میشن معمولاً توی هر بار صدا زدن دوباره ساخته میشن که یه هزینهٔ پنهانه؛ این ابزار اونها رو به اسکوپ ماژول منتقل میکنه تا فقط یه بار ساخته بشن. این کار محافظهکارانهست و فقط عبارتهایی که صرفاً از importها و مقادیر ثابت ساخته شدن جابهجا میشن. این ابزار برای بیلدرهای زیادی مثل Vite، webpack، esbuild، Rollup و Bun پلاگین آماده داره.
نکات کلیدی:
- zod-compiler اسکیماهای Zod رو موقع بیلد به اعتبارسنجِ بهینه تبدیل میکنه و ادعای ۲ تا ۷۵ برابر سرعت بیشتر داره.
- توی حالت خودکار بدون تغییر کد، همهٔ اسکیماهای exportشده رو پیدا و کامپایل میکنه.
- کل API زود (parse، safeParse، instanceof، .meta()) حفظ میشه و tRPC و Hono بدون تغییر کار میکنن.
- یه گارد بولی .is() بهعنوان ارزونترین راه چک تطابق اضافه میشه.
- برای Vite، webpack، esbuild و بقیه پلاگین داره و یه CLI هم برای حالت بدون باندلر ارائه میده.




