Analiza bundle'a i strategia dzielenia kodu
Analizowanie rozmiaru bundle'a za pomocą rollup-plugin-visualizer i ustalanie strategii dzielenia kodu według tras.
Analiza bundle'a i strategia dzielenia kodu to bezpłatna lekcja React Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej React Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs React Academy zawiera 4 lekcji w sumie.
Dlaczego rozmiar bundla ma znaczenie
Duże bundle JavaScript opóźniają Time To Interactive. Każdy KB kodu JS trzeba pobrać, sparsować i wykonać, zanim strona stanie się interaktywna — szczególnie w wolnych sieciach mobilnych.
Analizowanie za pomocą rollup-plugin-visualizer
W projektach Vite należy użyć wtyczki visualizer, aby wygenerować treemap bundla pokazujący, które moduły zajmują najwięcej miejsca.
// vite.config.ts
import { visualizer } from 'rollup-plugin-visualizer';
export default defineConfig({
plugins: [
visualizer({ open: true, gzipSize: true, brotliSize: true })
],
});
// After build, open the generated HTML file to explore the treemapNext.js Bundle Analyzer
Należy użyć @next/bundle-analyzer do analizowania bundli serwera i klienta w Next.js.
npm install @next/bundle-analyzer
// next.config.js
const withBundleAnalyzer = require('@next/bundle-analyzer')({
enabled: process.env.ANALYZE === 'true',
});
module.exports = withBundleAnalyzer({});
// Run:
// ANALYZE=true npm run buildDzielenie kodu na podstawie tras
Największy wpływ ma dzielenie kodu, w którym kod każdej trasy jest ładowany dopiero podczas przechodzenia użytkownika do tej trasy. React Router z lazy() i Next.js App Router robią to automatycznie.
// React Router v6 with lazy loading
import { lazy, Suspense } from 'react';
const Dashboard = lazy(() => import('./pages/Dashboard'));
const Settings = lazy(() => import('./pages/Settings'));
<Routes>
<Route path="/dashboard" element={<Suspense fallback={<Loading />}><Dashboard /></Suspense>} />
<Route path="/settings" element={<Suspense fallback={<Loading />}><Settings /></Suspense>} />
</Routes>Dzielenie kodu na poziomie komponentów
Należy odroczyć ładowanie ciężkich komponentów (map, wykresów i edytorów) do momentu, gdy będą potrzebne, używając lazy().
const MonacoEditor = lazy(() => import('@monaco-editor/react'));
const MapView = lazy(() => import('./MapView'));
function ProductEditor({ showMap }) {
return (
<>
<Suspense fallback={<EditorSkeleton />}><MonacoEditor /></Suspense>
{showMap && <Suspense fallback={<MapSkeleton />}><MapView /></Suspense>}
</>
);
}Dynamiczny import funkcji warunkowych
Duże biblioteki należy importować dopiero po aktywowaniu danej funkcji, aby nie ładować ich wszystkim użytkownikom.
async function exportToPDF() {
const { default: jsPDF } = await import('jspdf'); // ~300KB — loaded on demand
const doc = new jsPDF();
doc.text('Hello', 10, 10);
doc.save('export.pdf');
}Tree shaking
Nowoczesne bundlery eliminują nieużywane eksporty (martwy kod). Należy upewnić się, że zależności obsługują ESM, a nie CJS, aby tree shaking działał, oraz unikać importowania całych bibliotek, gdy używana jest tylko jedna funkcja.
// Bad — imports entire lodash (~70KB):
import _ from 'lodash';
const result = _.debounce(fn, 300);
// Good — imports only debounce (<2KB):
import debounce from 'lodash/debounce';
// or with tree-shaking-friendly lodash-es:
import { debounce } from 'lodash-es';Wstępne ładowanie krytycznych chunków
Należy użyć <link rel='modulepreload'> lub komentarzy magicznych Webpacka, aby wstępnie załadować chunk następnej strony, gdy użytkownik przebywa jeszcze na bieżącej stronie.
// Webpack magic comment — preload on hover:
const Dashboard = lazy(() => import(/* webpackPrefetch: true */ './Dashboard'));
// or preload (higher priority):
const Dashboard = lazy(() => import(/* webpackPreload: true */ './Dashboard'));Analizowanie wpływu zależności zewnętrznych
Należy użyć bundlephobia.com lub rozszerzenia Import Cost dla VS Code, aby sprawdzić skompresowany rozmiar dowolnego pakietu npm przed jego zainstalowaniem.
Ustalanie budżetu bundla
Należy ustawić limit rozmiaru dla każdej trasy w konfiguracji Webpacka lub Vite. Kompilacja kończy się błędem, jeśli chunk przekroczy budżet, dzięki czemu przypadkowe zwiększenie rozmiaru zostanie wykryte w CI.
// vite.config.ts
build: {
rollupOptions: {
output: {
manualChunks: {
'vendor-react': ['react', 'react-dom'],
'vendor-router': ['react-router-dom'],
},
},
},
chunkSizeWarningLimit: 200, // warn at 200KB
},Szybki sprawdzian
Jaka strategia dzielenia kodu ma największy wpływ w aplikacjach React SPA z wieloma stronami?
Podsumowanie
Należy analizować bundle za pomocą rollup-plugin-visualizer lub @next/bundle-analyzer. Należy stosować podział kodu na podstawie tras oraz podział na poziomie komponentów z użyciem lazy(). Tree shaking należy realizować przez importowanie wyłącznie używanych elementów. W CI należy ustawić budżety rozmiaru oraz używać wskazówek prefetch/preload dla kolejnej prawdopodobnej trasy.
Często zadawane pytania
Czy lekcja „Analiza bundle'a i strategia dzielenia kodu” jest bezpłatna?
Tak — pełny tekst „Analiza bundle'a i strategia dzielenia kodu” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu React Academy, przejdź na CoddyKit PRO. Kurs React Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Analiza bundle'a i strategia dzielenia kodu”?
Analizowanie rozmiaru bundle'a za pomocą rollup-plugin-visualizer i ustalanie strategii dzielenia kodu według tras. Ćwiczysz React Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć React Academy?
Nie wymagamy żadnego doświadczenia. React Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Analiza bundle'a i strategia dzielenia kodu”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji React Academy?
Tak. Każda lekcja React Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Pomiar Core Web Vitals w aplikacjach React
- Analiza bundle'a i strategia dzielenia kodu
- Optymalizacja obrazów i fontów w React
- Zmniejszanie INP: optymalizacja handlerów zdarzeń