تقسیم کد جاوا اسکریپت (Code Splitting): نگاهی عمیق به بارگذاری پویا و بهینه‌سازی عملکرد | MLOG | MLOG ); }

در این سناریو، کد مربوط به `HeavyModal` تنها در اولین باری که کاربر روی دکمه "Show Terms and Conditions" کلیک می‌کند، از سرور درخواست می‌شود.

۳. تقسیم کتابخانه‌های شخص ثالث (Vendor Chunks)

کد اپلیکیشن شما اغلب به کتابخانه‌های شخص ثالث از `node_modules` (مانند React، Lodash، D3.js، Moment.js) بستگی دارد. این کتابخانه‌ها بسیار کمتر از کد اپلیکیشن شما تغییر می‌کنند. با تقسیم آنها به یک چانک جداگانه "vendor"، می‌توانید از کش طولانی‌مدت مرورگر بهره‌مند شوید.

هنگامی که تغییری در کد اپلیکیشن خود اعمال می‌کنید، کاربر فقط باید چانک کوچک و تغییر یافته اپلیکیشن را دانلود کند. چانک بسیار بزرگتر vendor می‌تواند مستقیماً از کش مرورگر سرو شود، که منجر به بارگذاری‌های بعدی بسیار سریع صفحه می‌شود.

باندلرهای مدرن مانند Webpack (با `SplitChunksPlugin` خود) و Vite در این زمینه بسیار هوشمند هستند. آنها اغلب می‌توانند به طور خودکار چانک‌های vendor را بر اساس استفاده و اندازه ماژول ایجاد کنند و به حداقل پیکربندی نیاز دارند.

مثال پیکربندی `splitChunks` در Webpack:


// webpack.config.js
module.exports = {
  // ... other configs
  optimization: {
    splitChunks: {
      cacheGroups: {
        vendor: {
          test: /[/]node_modules[/]/,
          name: 'vendors',
          chunks: 'all',
        },
      },
    },
  },
};

نتیجه بهینه‌سازی عملکرد: اندازه‌گیری تأثیر

پیاده‌سازی تقسیم کد فقط یک تمرین نظری نیست؛ بلکه دستاوردهای عملکردی ملموس و قابل اندازه‌گیری ارائه می‌دهد که مستقیماً تجربه کاربری و Core Web Vitals شما را بهبود می‌بخشد.

تکنیک‌های پیشرفته و بهترین شیوه‌ها

پس از تسلط بر اصول اولیه، می‌توانید استراتژی بارگذاری خود را با تکنیک‌های پیشرفته‌تر اصلاح کنید.

Prefetching و Preloading

بارگذاری پویا عالی است، اما هنگامی که کاربر عملی را آغاز می‌کند، تأخیر کوچکی ایجاد می‌کند، زیرا مرورگر باید چانک جدید را دریافت کند. ما می‌توانیم این مشکل را با استفاده از resource hints کاهش دهیم:

باندلرهایی مانند Webpack به شما امکان می‌دهند این کار را به راحتی با "کامنت‌های جادویی" (magic comments) انجام دهید:


// Prefetch the dashboard code when this module is evaluated
const DashboardPage = lazy(() => 
  import(/* webpackPrefetch: true */ './pages/DashboardPage')
);

شناسایی نقاط تقسیم با تحلیل‌گرهای باندل (Bundle Analyzers)

چگونه می‌دانید چه چیزی را باید تقسیم کنید؟ حدس نزنید—تحلیل کنید! ابزارهایی مانند `webpack-bundle-analyzer` یا `source-map-explorer` یک تجسم treemap تعاملی از باندل‌های شما ایجاد می‌کنند. این به شما امکان می‌دهد تا فوراً بزرگترین ماژول‌ها و کتابخانه‌هایی را که کاندیداهای اصلی برای تقسیم هستند، شناسایی کنید.

اجتناب از آبشارهای شبکه (Network Waterfalls)

مراقب ایجاد زنجیره‌ای از importهای پویا باشید که در آن یک چانک باید بارگذاری شود تا بتواند بارگذاری چانک دیگری را آغاز کند. هر زمان که ممکن است، بارگذاری چندین چانک ضروری را به صورت موازی آغاز کنید تا کل زمان بارگذاری را به حداقل برسانید.

نتیجه‌گیری: تقسیم کد غیرقابل‌مذاکره است

در تلاش برای عملکرد بهینه وب، تقسیم کد از یک بهینه‌سازی خاص به یک رویه استاندارد و ضروری برای هر اپلیکیشن وب غیربدیهی تبدیل شده است. با تغییر از یک استراتژی بارگذاری یکپارچه به استراتژی بر اساس تقاضا، شما به زمان، داده و منابع دستگاه کاربر خود احترام می‌گذارید.

مزایای آن واضح و قانع‌کننده است:

با ابزارهای مدرن و پشتیبانی فریمورک‌ها، پیاده‌سازی تقسیم بر اساس مسیر و کامپوننت هرگز آسان‌تر از این نبوده است. زمان اقدام همین الان است. باندل خود را تحلیل کنید، بزرگترین وابستگی‌ها و کم‌استفاده‌ترین مسیرهای خود را شناسایی کنید و اولین نقطه تقسیم خود را پیاده‌سازی کنید. کاربران شما—و معیارهای عملکردتان—از شما سپاسگزار خواهند بود.