Next.js Dökümanı
About the Author
  • Katkıda Bulunma Rehberi
  • README
  • React'ın Temelleri (React Essentials)
  • Yönlendirme Temelleri (Routing Fundamentals)
    • Rotaların Tanımlanması
    • Rota İşleyicileri (Route Handlers)
    • Ara Yazılım (Middleware)
    • Proje Organizasyonu ve Dosya Kolokasyonu (Project Organization and File Colocation)
    • Uluslararasılaştırma (Internationalization)
    • Sayfalar ve Düzenler
    • Bağlama ve Gezinme (Linking and Navigating)
    • Rota Grupları (Route Groups)
    • Dinamik Rotalar (Dynamic Routes)
    • Kullanıcı Arayüzünü Yükleme ve Akış (Loading UI and Streaming)
    • Hata İşleme (Error Handling)
    • Paralel Rotalar (Parallel Routes)
    • Kesen Rotalar (Intercepting Routes)
  • Render Etme (Rendering)
    • Statik ve Dinamik Render Etme (Static and Dynamic Rendering)
    • Edge ve Node.js Çalışma Zamanları (Edge and Node.js Runtimes)
  • Veri Getirme (Data Fetching)
    • Veri Getirme (Data Fetching)
    • 2-caching
    • Verileri Yeniden Doğrulama (Revalidating)
    • Sunucu Eylemleri (Server Actions)
  • Şekillendirme (Styling)
    • CSS Modülleri (CSS Modules)
    • Tailwind CSS
    • CSS-in-JS
    • Sass
  • Optimizasyonlar (Optimizations)
    • Görüntü Optimizasyonu (Image Optimization)
    • Yazı Tipi Optimizasyonu (Font Optimization)
    • Komut Dosyası Optimizasyonu (Script Optimization)
    • Metadata
    • Statik Varlıklar (Static Assets)
    • Tembel Yükleme (Lazy Loading)
    • Analitik (Analytics)
    • OpenTelemetry
    • Enstrümantasyon
  • Yapılandırma (Configuring)
    • TypeScript
    • ESLint
    • Ortam Değişkenleri (Environment Variables)
    • Mutlak İçe Aktarmalar ve Modül Yolu Takma Adları (Absolute Imports and Module Path Aliases)
    • MDX
    • src Dizini
    • Taslak Modu (Draft Mode)
  • Dağıtım (Deploying)
    • Statik Dışa Aktarmalar (Static Exports)
  • Yükseltme Kılavuzu (Upgrading Guide)
    • 1-codemods
    • App Router Artırımlı Benimseme Kılavuzu
  • .github
    • ISSUE_TEMPLATE
      • bug_report
    • ISSUE_TEMPLATE
      • feature_request
Powered by GitBook
On this page
  • next/dynamic
  • İstemci Bileşenlerini İçe Aktarma (Importing Client Components)
  • SSR'yi Atlama (Skipping SSR)
  • Sunucu Bileşenlerini İçe Aktarma (Importing Server Components)
  • Harici Kütüphaneleri Yükleme
  • Özel bir yükleme bileşeni ekleme (Adding a custom loading component)
  • Adlandırılmış Dışa Aktarmaları İçe Aktarma (Importing Named Exports)

Was this helpful?

Edit on GitHub
  1. Optimizasyonlar (Optimizations)

Tembel Yükleme (Lazy Loading)

PreviousStatik Varlıklar (Static Assets)NextAnalitik (Analytics)

Last updated 1 year ago

Was this helpful?

Next.js'deki , bir rotayı oluşturmak için gereken JavaScript miktarını azaltarak bir uygulamanın ilk yükleme performansını artırmaya yardımcı olur.

İstemci Bileşenlerinin ve içe aktarılan kitaplıkların yüklenmesini ertelemenize ve bunları yalnızca gerektiğinde istemci paketine dahil etmenize olanak tanır. Örneğin, bir kullanıcı açmak için tıklayana kadar bir modalin yüklenmesini ertelemek isteyebilirsiniz.

Next.js'de tembel yüklemeyi uygulayabileceğiniz iki yol vardır:

  1. next/dynamic ile Dinamik İçe Aktarımları Kullanma

  2. ile Kullanımı

Varsayılan olarak, Sunucu Bileşenleri otomatik olarak edebilir ve kullanıcı arayüzü parçalarını sunucudan istemciye aşamalı olarak göndermek için akışı kullanabilirsiniz. Tembel yükleme İstemci Bileşenleri için geçerlidir.

next/dynamic

next/dynamic, ve 'in bir bileşimidir. Artımlı geçişe izin vermek için app ve pages dizinlerinde aynı şekilde davranır.

## Örnekler

İstemci Bileşenlerini İçe Aktarma (Importing Client Components)

// app/page.js

"use client";

import { useState } from "react";
import dynamic from "next/dynamic";

// Client Components:
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>
      {/* Hemen yükleyin, ancak ayrı bir istemci paketinde */}
      <ComponentA />

      {/* Talep üzerine yükleyin, yalnızca koşul karşılandığında/karşılanırsa */}
      {showMore && <ComponentB />}
      <button onClick={() => setShowMore(!showMore)}>Toggle</button>

      {/* Yalnızca istemci tarafına yükleyin */}
      <ComponentC />
    </div>
  );
}

SSR'yi Atlama (Skipping SSR)

Bir İstemci Bileşeni için ön render etmeyi devre dışı bırakmak istiyorsanız, ssr seçeneğini false olarak ayarlayabilirsiniz:

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

Sunucu Bileşenlerini İçe Aktarma (Importing Server Components)

Bir Sunucu Bileşenini dinamik olarak içe aktarırsanız, Sunucu Bileşeninin kendisi değil, yalnızca Sunucu Bileşeninin alt bileşenleri olan İstemci Bileşenleri lazy-load edilecektir.

// app/page.js

import dynamic from "next/dynamic";

// Server Component:
const ServerComponent = dynamic(() => import("../components/ServerComponent"));

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

Harici Kütüphaneleri Yükleme

// app/page.js

"use client";

import { useState } from "react";

const names = ["Tim", "Joe", "Bel", "Lee"];

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

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

          setResults(fuse.search(value));
        }}
      />
      <pre>Results: {JSON.stringify(results, null, 2)}</pre>
    </div>
  );
}

Özel bir yükleme bileşeni ekleme (Adding a custom loading component)

// app/page.js

import dynamic from "next/dynamic";

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

export default function Page() {
  return (
    <div>
      {/* <WithCustomLoading/> yüklenirken yükleme bileşeni oluşturulacaktır */}
      <WithCustomLoading />
    </div>
  );
}

Adlandırılmış Dışa Aktarmaları İçe Aktarma (Importing Named Exports)

// components/hello.js

"use client";

export function Hello() {
  return <p>Hello!</p>;
}
// app/page.js

import dynamic from "next/dynamic";

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

React.lazy() ve kullanıldığında, İstemci Bileşenleri varsayılan olarak önceden render edilecektir (SSR).

Harici kütüphaneler fonksiyonu kullanılarak isteğe bağlı olarak yüklenebilir. Bu örnekte bulanık arama için fuse.js harici kütüphanesi kullanılmaktadır. Modül, yalnızca kullanıcı arama girdisini yazdıktan sonra istemciye yüklenir.

Adlandırılmış bir dışa aktarımı dinamik olarak içe aktarmak için, işlevi tarafından döndürülen Promise'den geri döndürebilirsiniz:

tembel yükleme
Suspense
React.lazy()
code split
React.lazy()
Suspense
Suspense
import()
import()