Damoon Darvishi
Damoon Darvishi
خواندن ۵ دقیقه·۳ ماه پیش

سرعت بخشیدن به سایت با Dynamic imports در Next.js

در دنیای توسعه وب مدرن، تجربه کاربری به سرعت و واکنش پذیری برنامه شما بستگی دارد. به عنوان یک توسعه دهنده، همیشه به دنبال راه هایی برای بهبود عملکرد سایت هستیم.

یکی از این راهها، استفاده از dynamic import است؛ تکنیکی قدرتمند که میتواند بهطور قابل توجهی عملکرد بارگذاری اولیه برنامه های شما در Next.js را بهبود بخشد.

ایمپورتهای داینامیک چیست؟

ایمپورتهای داینامیک به شما این امکان را میدهند که ماژولهای Javascript را به صورت غیرهمزمان/asynchronously بارگذاری کنید. در یک برنامه Next.js، این یعنی میتوانید کامپوننتها را بهصورت درخواستی بارگذاری کنید، به جای اینکه همه آنها را در همان لحظه بارگذاری صفحه اجرا کنید. این کار میتواند حجم فایل Javascript را کاهش داده و زمان بارگذاری صفحه را سریعتر کند، که در نهایت تجربه کاربری بهتری ارائه میدهد.

چرا از dynamic imports استفاده کنیم؟

دلیل اصلی استفاده از dynamic imports، بهبود عملکرد بارگذاری اولیه برنامه است. با تقسیم کد به قسمتهای کوچکتر که فقط در زمان نیاز بارگذاری میشوند، حجم کدی که هنگام اولین بازدید کاربر از سایت باید پردازش و اجرا شود، کاهش پیدا میکند. این موضوع به ویژه برای برنامه های بزرگ با تعداد زیادی کامپوننت مفید است.

نحوه پیادهسازی dynamic imports در Next.js

برای ایمپورت داینامیک یک کامپوننت در Next.js، میتوانید از تابع next/dynamic استفاده کنید. این تابع به شما امکان میدهد کامپوننتها را به صورت asynchronously بارگذاری کرده و میتوانید با استفاده از تنظیمات رندر سمت سرور (SSR) رفتار ایمپورتها را کنترل کنید.

مثال سادهای از نحوه استفاده از next/dynamic برای ایمپورت یک کامپوننت در React:

در این مثال، MyComponent فقط زمانی بارگذاری میشود که کامپوننت HomePage رندر شود، که باعث کاهش زمان بارگذاری اولیه میشود.
در این مثال، MyComponent فقط زمانی بارگذاری میشود که کامپوننت HomePage رندر شود، که باعث کاهش زمان بارگذاری اولیه میشود.



استفاده از Dynamic Imports پیشرفته با تنظیمات SSR

و Next.js به شما امکان میدهد رفتار رندر سمت سرور (SSR) را برای dynamic imports کنترل کنید. میتوانید گزینه ssr را به false تنظیم کنید تا SSR برای یک component غیرفعال شود:

با غیرفعال کردن SSR، این کامپوننت تنها در سمت کاربر (کلاینت) رندر خواهد شد. این برای کامپوننتهایی که به ویژگیهای مرورگر نیاز دارند، بسیار مفید است.
با غیرفعال کردن SSR، این کامپوننت تنها در سمت کاربر (کلاینت) رندر خواهد شد. این برای کامپوننتهایی که به ویژگیهای مرورگر نیاز دارند، بسیار مفید است.



استفاده از ویژگی Suspense با Dynamic Imports

ویژگی Suspense در React به شما اجازه میدهد هنگام بارگذاری یک کامپوننت، یک رابط کاربری جایگزین (Fallback) نشان دهید. اینجا مثالی از چگونگی پیاده سازی آن آورده شده است:

در این مثال، متن
در این مثال، متن

بهینه سازی بارگذاری صفحه با Dynamic Imports

یکی از بزرگترین مزایای dynamic imports، امکان بهینه سازی زمان بارگذاری صفحه است. با بارگذاری components تنها در زمان نیاز، مانند زمانی که کاربر با صفحه تعامل میکند، میتوانید به طور قابل توجهی بار اولیه برنامه را کاهش دهید.

بارگذاری Components در زمان تعامل کاربر

به یک سناریو فکر کنید که در آن یک component تنها زمانی بارگذاری شود که کاربر دکمه ای را کلیک کند. میتوانید از یک dynamic import در یک event handler استفاده کنید:

در این مثال، MyComponent تنها زمانی بارگذاری و رندر میشود که کاربر دکمه را کلیک کند. این باعث بهبود عملکرد بارگذاری اولیه صفحه میشود.
در این مثال، MyComponent تنها زمانی بارگذاری و رندر میشود که کاربر دکمه را کلیک کند. این باعث بهبود عملکرد بارگذاری اولیه صفحه میشود.



تقسیم کد/Code Splitting با Dynamic Imports

تقسیم کد روشی است که در آن کد به چندین باندل تقسیم میشود که میتوانند در صورت نیاز بارگذاری شوند. Dynamic Imports این امکان را فراهم میکنند که Components به صورت asynchronously بارگذاری شوند. با تقسیم استراتژیک کد، میتوانید اطمینان حاصل کنید که کاربران فقط کدی را که نیاز دارند، دریافت میکنند، که باعث میشود زمانهای بارگذاری سریعتر و برنامهای واکنشپذیرتر داشته باشید.

تقسیم در Route Level

نکست/Next.js به طور خودکار code splitting را در route level انجام میدهد. هر صفحه در دایرکتوری pages به یک باندل جداگانه تبدیل میشود. با این حال، میتوانید عملکرد برنامه خود را با استفاده از dynamic imports درون صفحات، بیشتر بهینه کنید.

بهعنوان مثال، اگر یک کامپوننت سنگین مانند ChartComponent دارید که فقط در یک مسیر خاص نیاز است، میتوانید آن را به صورت dynamic import کنید تا از بارگذاری آن در صفحه اولیه جلوگیری شود:


تقسیم کد/ Code Splitting درون کامپوننتها

همچنین میتوانید از dynamic imports برای code splitting در داخل کامپوننتهای جداگانه استفاده کنید. به عنوان مثال، اگر یک کامپوننت Header شامل ویژگی search باشد که به طور فوری نیاز نیست، میتوانید عملکرد جستجو را به صورت dynamic import کنید:


مدیریت ایمپورتهای نامگذاری شده با Dynamic Imports

وقتی یک ماژول با چندین ایمپورت نامگذاریشده به صورت dynamic imports میکنید، نیاز دارید آن را کمی متفاوت مدیریت کنید. میتوانید از عبارت await import استفاده کنید تا تمامی ایمپورتهای نامگذاریشده از ماژول را دریافت کنید:

در این مثال، MyComponent و AnotherComponent هر دو ایمپورتهای نامگذاریشده از فایل MyComponents هستند. آنها به صورت داینامیک زمانی که کاربر دکمه را کلیک میکند، بارگذاری میشوند.
در این مثال، MyComponent و AnotherComponent هر دو ایمپورتهای نامگذاریشده از فایل MyComponents هستند. آنها به صورت داینامیک زمانی که کاربر دکمه را کلیک میکند، بارگذاری میشوند.

بهترین روشها برای استفاده از Dynamic Imports

هنگام پیاده سازی dynamic imports، چندین بهترین روش را باید در نظر داشته باشید تا از عملکرد بهینه و تجربه کاربری خوب اطمینان حاصل کنید:

  • اولویت بندی محتوای بالای صفحه: کامپوننتهایی که پایین صفحه هستند یا از اهمیت کمی برخوردار هستند را به صورت dynamic imports کنید.
  • استفاده از نشانگر بارگذاری: به کاربران هنگام بارگذاری کامپوننتها بازخورد دهید، مخصوصاً اگر ممکن است بارگذاری کمی طول بکشد.
  • آزمایش عملکرد: از ابزارهایی مانند Lighthouse برای اندازه گیری تأثیر dynamic imports بر عملکرد سایت استفاده کنید.
  • اجتناب از تقسیم بیش از حد: code splitting بیش از حد ممکن است منجر به درخواستهای HTTP بیش از حد و بار اضافی شود. توازن مناسبی برای برنامه خود پیدا کنید.

نتیجه گیری

ایمپورتهای داینامیک در Next.js ابزاری قدرتمند برای بهبود عملکرد و کارایی برنامه های React شما هستند. با درک و پیاده سازی dynamic imports، میتوانید از زمانهای بارگذاری سریعتر و تجربه مرور روانتر برای کاربران خود اطمینان حاصل کنید.

به خاطر داشته باشید که از Dynamic imports به صورت استراتژیک استفاده کنید و همیشه تجربه کاربری را در اولویت قرار دهید.

منبع اصلی: https://shorturl.at/ipjDY

nextjsreact
شاید از این پست‌ها خوشتان بیاید