ویرگول
ورودثبت نام
Navid Barsalari
Navid Barsalariمهندس ارشد نرم‌افزار | تکنیکال لید | +۱۰ سال سابقه علاقه‌مند به System Design، توسعه بک‌اند (Go / Node.js) و معماری دیتابیس. تمرکز فعلی من روی ساخت و توسعه سرویس‌های مقیاس‌پذیر B2B است.
Navid Barsalari
Navid Barsalari
خواندن ۲ دقیقه·۱ ماه پیش

🚀 ترفندهای پنهان پرفورمنس در TypeScript

🧠 خلاصه

TypeScript معمولاً به‌عنوان یک ابزار بدون هزینه در زمان اجرا شناخته می‌شود.
اما واقعیت این است که نحوه استفاده شما از TypeScript می‌تواند روی:

  • حجم باندل

  • سرعت اجرا

  • تجربه توسعه‌دهنده

تأثیر مستقیم بگذارد.

در این مقاله، ترفندهایی را بررسی می‌کنیم که اغلب نادیده گرفته می‌شوند اما در پروژه‌های واقعی تفاوت محسوسی ایجاد می‌کنند.

⚡ ۱. استفاده از const enum به‌جای enum

وقتی از enum معمولی استفاده می‌کنی، TypeScript در خروجی JavaScript یک object واقعی تولید می‌کند.

این یعنی:

  • کد بیشتر در باندل

  • دسترسی در runtime

اما در const enum:

const enum Status { Pending, Completed }

TypeScript مقدارها را مستقیماً جایگزین می‌کند و هیچ objectای ساخته نمی‌شود.

📌 نتیجه:

  • حجم کمتر

  • دسترسی سریع‌تر

اگر به reverse mapping یا iteration نیاز نداری، const enum انتخاب بهتری است.

🧩 ۲. استفاده از Union Type به‌جای enum

در خیلی از موارد اصلاً نیازی به enum نداری.

type Direction = "Up" | "Down" | "Left" | "Right";

مزایا:

  • هیچ کدی در خروجی تولید نمی‌شود

  • ساده‌تر و خواناتر

  • کاملاً type-safe

📌 این یکی از ساده‌ترین راه‌ها برای کاهش حجم باندل است.

🔍 ۳. پرهیز از any

استفاده از any فقط مشکل type safety نیست.

مشکلات پنهان:

  • inference را خراب می‌کند

  • refactor را سخت می‌کند

  • باعث خطاهای runtime می‌شود

بهتر است از unknown یا type دقیق استفاده کنی.

🧠 ۴. استفاده از as const

const config = { mode: "dark" } as const;

بدون as const:

  • مقدارها به string عمومی تبدیل می‌شوند

با as const:

  • مقدارها literal می‌شوند

  • readonly می‌شوند

📌 نتیجه:

  • inference بهتر

  • جلوگیری از باگ


📦 ۵. ساده نگه داشتن typeها

typeهای خیلی پیچیده (مثل genericهای تو در تو):

  • کامپایل را کند می‌کنند

  • IDE را سنگین می‌کنند

📌 قانون ساده:

اگر فهمیدنش سخته، احتمالاً زیادی پیچیده‌ست 😄


🚫 ۶. استفاده زیاد از Barrel File

الگوی رایج:

export * from "./utils";

مشکل:

  • ممکن است tree-shaking به‌درستی کار نکند

  • کدهای استفاده‌نشده وارد باندل شوند

راه بهتر:

import { fn } from "./utils/fn";

⚙️ ۷. فعال کردن isolatedModules

در tsconfig:

{ "compilerOptions": { "isolatedModules": true } }

مزایا:

  • build سریع‌تر

  • سازگاری بهتر با ابزارهایی مثل esbuild و swc


🔥 ۸. جدا کردن type-check از build

type checking هزینه‌بر است.

بهتر است:

  • جدا اجرا شود

  • build سریع‌تر شود

مثلاً:

  • build با esbuild

  • type-check با tsc


🧪 ۹. استفاده از readonly

type User = { readonly name: string; };

مزایا:

  • جلوگیری از تغییر ناخواسته

  • کمک به بهینه‌سازی در runtime


🧠 جمع‌بندی

TypeScript در runtime وجود ندارد،

اما تصمیم‌هایی که با آن می‌گیری کاملاً واقعی هستند.

با چند تغییر ساده می‌توانی:

  • باندل سبک‌تر داشته باشی

  • build سریع‌تر داشته باشی

  • کد maintainableتری بنویسی


✍️ جمله‌ای که باید یادت بماند

TypeScript رایگان است، اما استفاده اشتباه از آن هزینه دارد.

typescriptjavascriptجاواسکریپتتایپ اسکریپت
۵
۰
Navid Barsalari
Navid Barsalari
مهندس ارشد نرم‌افزار | تکنیکال لید | +۱۰ سال سابقه علاقه‌مند به System Design، توسعه بک‌اند (Go / Node.js) و معماری دیتابیس. تمرکز فعلی من روی ساخت و توسعه سرویس‌های مقیاس‌پذیر B2B است.
شاید از این پست‌ها خوشتان بیاید