İçeriğe geç

Kod Bölme — Giriş Ekranı Neden Grafik Kütüphanesini İndiriyor?

Orta 8 dk Sık karşılaşılır

Önce şunu oku: Core Web Vitals — Sayfa Ne Zaman Gerçekten Hazır?

30 saniyede özet

Bütün uygulama tek bir JavaScript paketindeyse, yalnızca şifre isteyen giriş ekranı bile grafik ve PDF kütüphanelerini indirir. Paketi sayfalara bölmek ve nadir kullanılan ağır kodu kullanıldığı anda yüklemek ilk açılışı hafifletir.

Bir günlük geziye çıkıyorsun. Bütün dolabı sırtlarsan daha ilk adımda yorulursun. Yalnızca o günün çantasını alırsın; şemsiyeyi de yağmur başlayınca çıkarırsın.

  1. Bayt: Giriş ekranı telefonda neden bu kadar geç açılıyor? Sadece iki kutu var!

  2. Sen: Network sekmesine baktım: tek bir büyük JavaScript dosyası iniyor.

  3. Bayt: İçinde grafik kütüphanesi de var, PDF kütüphanesi de... Giriş ekranında ikisi de yok.

  4. Bayt: Bütün dolabı sırtlamışız. Bugün sadece bir çanta lazım.

Tek paket neden ağırdır?

Derleme aracı, uygulamanın bütün kodunu varsayılan olarak tek bir pakette toplayabilir. O zaman ilk ekran, kullanıcının belki hiç açmayacağı sayfaların kodunu da indirir.

Giriş ekranı yalnızca iki kutu ve bir düğmedir. Ama tek pakette raporlar sayfasının grafik kütüphanesi ve PDF dışa aktarıcısı da vardır.

Kafam karıştı, daha basit anlat

Tek paket, kullanıcının o an görmediği sayfaların kodunu da ilk ekrana indirir.

Hızlı kontrolBaşlangıç

Bütün uygulama tek bir JavaScript paketindeyse giriş ekranı ne indirir?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Büyük bir JavaScript paketi telefonda neden ilk açılışı yavaşlatır?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Böl, ve ağırı kullanıldığında getir

Paketi sayfalara böldük. Raporlar sayfası, dosyanın en üstünde PDF kütüphanesini içe aktarıyor. Butona hiç basmayan bir kullanıcı raporlar sayfasını açarsa PDF kütüphanesini indirir mi? Cevabı göster

İndirir. Dosyanın en üstündeki içe aktarma, sayfa açılır açılmaz yüklenir. PDF kütüphanesini yalnızca butona basınca istemek için onu o anda, dinamik olarak içe aktarmak gerekir.

Gerekeni şimdi, nadir olanı gerektiğinde.
Adım adım oku
  1. Bütün dolabı sırtla: ilk adım çok ağır.
  2. Yalnızca bugünün çantası: hafif çıkış.
  3. Yağmur başlayınca şemsiyeyi al.
  4. Gerekeni şimdi, nadir olanı gerektiğinde.

kod bölmeUygulamanın JavaScript'ini parçalara ayırıp her parçayı gerektiğinde indirmek. İlk ekran yalnızca kendi ihtiyacını yükler.Sözlükte gör →, uygulamayı parçalara ayırır; her sayfa kendi parçasını, açıldığı anda indirir. React’te bunun en kolay yolu sayfaları lazy ile yüklemektir.

Nadir kullanılan ağır bir kütüphane için dinamik importBir modülü dosyanın başında değil, çalışma anında await import('...') ile yüklemek. Nadir kullanılan ağır kod için idealdir.Sözlükte gör → kullanılır: await import('...') butona basıldığında çalışır. Bazen en büyük kazanç ise bir kütüphaneyi hiç indirmemektir; tarihleri biçimlendirmek için tarayıcının hazır Intl aracı yeter.

Kafam karıştı, daha basit anlat

Sayfaları ayrı parçalara böl. Nadir kullanılan ağır kodu, kullanıldığı anda yükle.

Hızlı kontrolOrta

Kod bölme (code splitting) nedir?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Nadir kullanılan ağır bir PDF kütüphanesini yalnızca butona basılınca yüklemek için ne kullanılır?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Kendin gör

Giriş ekranı ne kadar JavaScript indiriyor?

Tohum 4489
  1. Giriş ekranı
  2. Hesaplar
  3. Havale
  4. Raporlar
  5. “PDF olarak indir”e basıldı

İlk ekran: 0 KB · Toplam: 0 KB

Hız
Adım 0

Şu an ne oldu?

Tek paket

Önce giriş ekranı açılıyor; okuyucu sonra sırayla diğer sayfalara geçiyor.

Görevler0/3

  • Giriş ekranı 500 KB’tan fazla indirsinaçık

    İpucu

    Her şey tek pakette.

  • PDF kütüphanesi yalnızca butona basılınca insinaçık

    İpucu

    Dinamik import.

  • Giriş ekranı 110 KB ya da daha az indirsinaçık

    İpucu

    Böl, ve her sayfanın taşıdığı kütüphaneye bak.

Olay günlüğü (0)

Henüz olay yok. Oynat veya adımla.

  1. Varsayılanla oynat. Giriş ekranı 535 KB indirdi; grafik ve PDF kütüphaneleri dahil.
  2. “Sayfa başına parça” seç. Giriş ekranı 175 KB’a indi. Ama raporlar sayfası PDF’i de getirdi.
  3. “Sayfa başına + PDF tıklayınca” seç. PDF yalnızca butona basılınca indi.
  4. “Intl” seçeneğini de aç. Tarih kütüphanesi hiç inmedi; giriş ekranı 105 KB.
Hızlı kontrolOrta

Sayfalar bölündü, ama raporlar sayfası PDF kütüphanesini en üstte içe aktarıyor. Ne olur?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

React'te bir sayfayı kendi parçasında yüklemenin kolay yolu nedir?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Tuzaklar

Her şeyi ayrı parça yapmak. Yüzlerce küçük parça, yüzlerce ayrı istek demektir. Sayfa düzeyinde bölmek ve yalnızca gerçekten ağır kütüphaneleri ayırmak genelde yeter.

Beklerken boş ekran göstermek. Parça inerken kısa bir yükleniyor durumu göster; ekran boş kalırsa kullanıcı bir şeyin bozulduğunu sanır.

Ölçmeden tahmin etmek. Hangi kütüphanenin ne kadar yer kapladığını derleme çıktısında ya da bir paket görselleştiricisinde gör. Sürprizler çoğu zaman küçük görünen bir importtan çıkar.

Kafam karıştı, daha basit anlat

Parçaları abartma, beklerken bir şey göster, paketi tahmin etme, ölç.

Hızlı kontrolOrta

Parça inerken ekranda ne gösterilmeli?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.
Derinleş · Mobil bankacılık: sayfa başına parça, PDF tıklayınca 4 dosya · ~59 satır · ilk okumada atlayabilirsin
Proje dosyaları

web/src/ routes.tsx Yönlendirme: her sayfa lazy ile kendi parçasında; inerken kısa bir yükleniyor yazısı.

web/src/routes.tsx
import { lazy, Suspense } from 'react';
import { createBrowserRouter } from 'react-router';
// Each page becomes its own chunk, downloaded the first time it is opened.
const Accounts = lazy(() => import('./pages/Accounts'));
const Transfer = lazy(() => import('./pages/Transfer'));
const Reports = lazy(() => import('./pages/Reports'));
const page = (Component: React.ComponentType) => (
<Suspense fallback={<p role="status">Yükleniyor…</p>}>
<Component />
</Suspense>
);
export const router = createBrowserRouter([
{ path: '/hesaplar', element: page(Accounts) },
{ path: '/havale', element: page(Transfer) },
{ path: '/raporlar', element: page(Reports) },
]);

web/src/pages/ Reports.tsx Raporlar: PDF kütüphanesi en üstte değil, butona basılınca dinamik olarak yükleniyor.

web/src/pages/Reports.tsx
import { useState } from 'react';
import { SpendingChart } from '../charts/SpendingChart';
export default function Reports() {
const [exporting, setExporting] = useState(false);
async function exportPdf() {
setExporting(true);
// The PDF library is heavy and rarely used: fetch it only now.
const { buildStatementPdf } = await import('../pdf/statement');
await buildStatementPdf();
setExporting(false);
}
return (
<>
<SpendingChart />
<button type="button" onClick={exportPdf} disabled={exporting}>
{exporting ? 'Hazırlanıyor…' : 'PDF olarak indir'}
</button>
</>
);
}

web/src/format/ date.ts Tarih: ayrı bir kütüphane yerine tarayıcının Intl aracı.

web/src/format/date.ts
// The browser already knows how to format Turkish dates; no date library needed.
const turkishDate = new Intl.DateTimeFormat('tr-TR', { day: 'numeric', month: 'long', year: 'numeric' });
const turkishMoney = new Intl.NumberFormat('tr-TR', { style: 'currency', currency: 'TRY' });
export const formatDate = (date: Date): string => turkishDate.format(date);
export const formatMoney = (amount: number): string => turkishMoney.format(amount);

web/ vite.config.ts Vite: derleme sonunda hangi parçanın ne kadar olduğunu gösteren görselleştirici.

web/vite.config.ts
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import { visualizer } from 'rollup-plugin-visualizer';
export default defineConfig({
plugins: [
react(),
// Writes stats.html after each build: which chunk holds what, and how big it is.
visualizer({ filename: 'stats.html', gzipSize: true }),
],
});

Kendini sına

Şimşek turu1/4

Tek paket, kullanıcının o an görmediği sayfaların kodunu da indirir.

Soru 1/3İleri

Her fonksiyonu ayrı bir parçaya bölmenin sakıncası nedir?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Aklında kalacak üç şey

  1. 1 Tek bir paket, kullanıcının o an görmediği sayfaların kodunu da ilk ekrana yükler. Telefonda ve yavaş bağlantıda ilk açılış bunu bekler.
  2. 2 Kod bölme, uygulamayı parçalara ayırır: her sayfa kendi parçasını, ihtiyaç duyulduğu anda indirir.
  3. 3 Nadir kullanılan ağır bir kütüphane, dosyanın en üstünde değil, kullanıldığı anda dinamik import ile yüklenir. Bazen en iyi kazanç, bir kütüphaneyi hiç indirmemektir.
Sonraki kapı Metroda bağlantı koptu. Uygulama açıldı ve bakiye göründü. Peki o bakiye ne zamanki? Çevrimdışı Uygulama — Metroda Bağlantı Kopunca Ne Gösterilir? · 8 dk

4 kart sonraki derste seni bekliyor

0/4 kart bu dersten toplandı