بارگذاری تنبل کامپوننت‌ها و کتابخانه‌ها در Next.js – بهینه‌سازی عملکرد با Dynamic Imports و Suspense

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

Lazy LoadingClient Componentnext/dynamicSuspense

~2 دقیقه مطالعه · آخرین به‌روزرسانی ۶ آبان ۱۴۰۴

مقدمه


بارگذاری تنبل (Lazy Loading) در Next.js به شما اجازه می‌دهد کامپوننت‌ها و کتابخانه‌ها را فقط زمانی که نیاز است بارگذاری کنید. این کار باعث کاهش حجم اولیه bundle و بهبود سرعت بارگذاری صفحات می‌شود.


روش‌های بارگذاری تنبل


  • استفاده از next/dynamic: ترکیبی از React.lazy و Suspense با پشتیبانی از SSR
  • استفاده از React.lazy و Suspense: مناسب برای Client Components

مثال: بارگذاری کامپوننت‌های کلاینت


'use client'
import { useState } from 'react'
import dynamic from 'next/dynamic'

const ComponentA = dynamic(() => import('../components/A'))
const ComponentB = dynamic(() => import('../components/B'))
const ComponentC = dynamic(() => import('../components/C'), { ssr: false })

export default function ClientComponentExample() {
  const [showMore, setShowMore] = useState(false)

  return (
    <div>
      <ComponentA />
      {showMore && <ComponentB />}
      <button onClick={() => setShowMore(!showMore)}>Toggle</button>
      <ComponentC />
    </div>
  )
}

غیرفعال کردن SSR برای کامپوننت‌های کلاینت


برای جلوگیری از prerender شدن کامپوننت در سرور:

const ComponentC = dynamic(() => import('../components/C'), { ssr: false })

بارگذاری کامپوننت‌های سرور


در صورت import تنبل کامپوننت سرور، فقط کامپوننت‌های کلاینت داخل آن به‌صورت تنبل بارگذاری می‌شوند. گزینه ssr: false در کامپوننت‌های سرور پشتیبانی نمی‌شود.

const ServerComponent = dynamic(() => import('../components/ServerComponent'))

export default function ServerComponentExample() {
  return <ServerComponent />
}

بارگذاری کتابخانه‌های خارجی


برای بارگذاری کتابخانه‌ها به‌صورت تنبل، از import() استفاده کنید:

'use client'
import { useState } from 'react'

const names = ['Tim', 'Joe', 'Bel', 'Lee']

export default function Page() {
  const [results, setResults] = useState()

  return (
    <input
      type="text"
      placeholder="Search"
      onChange={async (e) => {
        const Fuse = (await import('fuse.js')).default
        const fuse = new Fuse(names)
        setResults(fuse.search(e.currentTarget.value))
      }}
    />
  )
}

افزودن کامپوننت بارگذاری سفارشی


'use client'
import dynamic from 'next/dynamic'

const WithCustomLoading = dynamic(() => import('../components/WithCustomLoading'), {
  loading: () => <p>Loading...</p>,
})

export default function Page() {
  return <WithCustomLoading />
}

بارگذاری تنبل exportهای نام‌گذاری‌شده


برای import تنبل یک export نام‌گذاری‌شده:

const ClientComponent = dynamic(() =>
  import('../components/hello').then((mod) => mod.Hello)
)

جمع‌بندی


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


نوشته و پژوهش‌شده توسط دکتر شاهین صیامی

مقالات مرتبط

مسیریابی پیشرفته و هوک‌های عملکرد در Next.js — راهنمای توسعه‌دهنده برای App Router

Next.js مجموعه‌ای غنی از هوک‌های کلاینت و ابزارهای کش و ناوبری را در اختیار توسعه‌دهندگان قرار می‌دهد. از خواندن پارامترهای مسیر تا گزارش Web Vitals و مدیریت کش، این مقاله مهم‌ترین ابزارهای App Router را با مثال‌های کاربردی معرفی می‌کند.

ادامه

مدیریت احراز هویت و کش در Next.js — راهنمای توسعه‌دهنده برای امنیت و عملکرد پویا

Next.js با معرفی قابلیت‌های آزمایشی جدید، امکان کنترل دقیق‌تر دسترسی و کش داده‌ها را فراهم کرده است. تابع unauthorized برای مدیریت خطای 401 و هدایت کاربران به صفحه ورود، unstable_cache برای کش هوشمند عملیات سنگین، updateTag برای بازسازی آنی داده‌ها، و useLinkStatus برای نمایش وضعیت ناوبری استفاده می‌شوند. این مقاله نحوه استفاده از این ابزارها را با مثال‌های کاربردی و نکات مهم بررسی می‌کند.

ادامه

redirect و refresh در Next.js — ریدایرکت‌های هوشمند و تازه‌سازی مسیر در Server Actions

تابع redirect در Next.js برای هدایت کاربر به مسیر جدید استفاده می‌شود و بسته به نوع استفاده، پاسخ HTTP با وضعیت 307 یا 303 ارسال می‌کند. این تابع در Server Components، Client Components، Route Handlers و Server Actions قابل استفاده است. تابع refresh نیز برای تازه‌سازی مسیر کلاینت از درون Server Action استفاده می‌شود. این مقاله نحوه استفاده از هر دو تابع را با مثال‌های کاربردی و نکات مهم توضیح می‌دهد.

ادامه

Next.js با معرفی NextRequest و NextResponse، APIهای Request و Response مرورگر را گسترش داده و ابزارهای قدرتمندی برای مدیریت کوکی‌ها، هدرها، ریدایرکت‌ها، بازنویسی مسیرها و پاسخ‌های JSON فراهم کرده است. این مقاله نحوه استفاده از این ابزارها را با مثال‌های کاربردی و نکات امنیتی توضیح می‌دهد.

Next.js با معرفی NextRequest و NextResponse، APIهای Request و Response مرورگر را گسترش داده و ابزارهای قدرتمندی برای مدیریت کوکی‌ها، هدرها، ریدایرکت‌ها، بازنویسی مسیرها و پاسخ‌های JSON فراهم کرده است. این مقاله نحوه استفاده از این ابزارها را با مثال‌های کاربردی و نکات امنیتی توضیح می‌دهد.

ادامه

headers، ImageResponse، notFound و permanentRedirect در Next.js — مدیریت درخواست‌ها، تولید تصویر، خطا و ریدایرکت

Next.js ابزارهای قدرتمندی برای مدیریت درخواست‌ها و پاسخ‌ها در کامپوننت‌های سروری فراهم کرده است. تابع headers برای خواندن هدرهای HTTP ورودی، ImageResponse برای تولید تصاویر داینامیک، notFound برای نمایش صفحه خطای 404، و permanentRedirect برای ریدایرکت دائمی کاربران استفاده می‌شوند. این مقاله نحوه استفاده از هر یک را با مثال‌های کاربردی توضیح می‌دهد.

ادامه

راهنمای کامل استفاده از metadata و generateMetadata در Next.js

در نسخه‌های مدرن Next.js، مدیریت metadata صفحات بسیار قدرتمندتر و ساده‌تر شده است. metadata به‌صورت خودکار در تگ <head> صفحات تزریق می‌شود و نقش مهمی در SEO، اشتراک‌گذاری اجتماعی و تجربه کاربری دارد. این مقاله دو روش اصلی تعریف metadata را بررسی می‌کند: استفاده از آبجکت ثابت metadata و تابع داینامیک generateMetadata.

ادامه