Bahasa Indonesia

Buka waktu muat awal yang lebih cepat dan kinerja yang ditingkatkan untuk aplikasi React Anda dengan lazy loading dan code splitting komponen. Pelajari teknik praktis dan praktik terbaik.

Lazy Loading di React: Code Splitting Komponen untuk Optimasi Kinerja

Di dunia digital yang serba cepat saat ini, kinerja situs web adalah yang terpenting. Pengguna mengharapkan kepuasan instan, dan waktu muat yang lambat dapat menyebabkan frustrasi, keranjang belanja yang ditinggalkan, dan citra merek yang negatif. Untuk aplikasi React, mengoptimalkan kinerja sangat penting untuk memberikan pengalaman pengguna yang lancar dan menarik. Salah satu teknik ampuh untuk mencapai ini adalah lazy loading dengan code splitting komponen.

Apa itu Lazy Loading dan Code Splitting?

Lazy loading adalah teknik di mana sumber daya, seperti gambar, skrip, dan komponen, hanya dimuat saat dibutuhkan, bukan semuanya sekaligus saat pemuatan halaman awal. Hal ini secara signifikan mengurangi jumlah data yang perlu diunduh dan di-parse di awal, menghasilkan waktu muat awal yang lebih cepat dan peningkatan kinerja yang dirasakan.

Code splitting adalah proses membagi kode aplikasi Anda menjadi bagian-bagian (atau bundle) yang lebih kecil dan lebih mudah dikelola. Hal ini memungkinkan browser untuk hanya mengunduh kode yang diperlukan untuk tampilan awal, menunda pemuatan kode lain hingga benar-benar diperlukan. Lazy loading memanfaatkan code splitting untuk memuat komponen tertentu hanya ketika komponen tersebut akan dirender.

Mengapa Menggunakan Lazy Loading dan Code Splitting di React?

Inilah alasan mengapa Anda harus mempertimbangkan untuk memasukkan lazy loading dan code splitting ke dalam proyek React Anda:

Cara Menerapkan Lazy Loading di React

React menyediakan dukungan bawaan untuk lazy loading menggunakan komponen React.lazy dan Suspense. Berikut panduan langkah demi langkah:

1. Menggunakan React.lazy()

React.lazy() memungkinkan Anda mengimpor komponen secara dinamis, secara efektif membagi kode Anda menjadi beberapa bagian terpisah. Ini membutuhkan fungsi yang memanggil import(), yang mengembalikan Promise yang me-resolve ke komponen tersebut.


const MyComponent = React.lazy(() => import('./MyComponent'));

Dalam contoh ini, MyComponent hanya akan dimuat ketika akan dirender.

2. Membungkus dengan <Suspense>

Karena React.lazy() menggunakan impor dinamis, yang bersifat asinkron, Anda perlu membungkus komponen yang di-lazy load dengan komponen <Suspense>. Komponen <Suspense> memungkinkan Anda menampilkan UI fallback (misalnya, pemintal pemuatan) saat komponen sedang dimuat.


import React, { Suspense } from 'react';

function MyPage() {
  return (
    Loading...
}> ); }

Dalam contoh ini, pesan Loading... akan ditampilkan saat MyComponent sedang dimuat. Setelah komponen dimuat, ia akan menggantikan UI fallback.

3. Contoh Praktis: Lazy Loading Galeri Gambar yang Besar

Mari kita pertimbangkan skenario di mana Anda memiliki galeri gambar yang besar. Memuat semua gambar sekaligus dapat sangat memengaruhi kinerja. Berikut cara Anda dapat melakukan lazy load pada gambar menggunakan React.lazy() dan <Suspense>:


import React, { Suspense } from 'react';

const LazyImage = React.lazy(() => import('./Image'));

function ImageGallery() {
  const images = [
    { id: 1, src: 'image1.jpg', alt: 'Gambar 1' },
    { id: 2, src: 'image2.jpg', alt: 'Gambar 2' },
    { id: 3, src: 'image3.jpg', alt: 'Gambar 3' },
    // ... gambar lainnya
  ];

  return (
    
{images.map(image => ( Memuat gambar...
}> ))} ); } export default ImageGallery;

Dan komponen Image.js:


import React from 'react';

const Image = ({ src, alt }) => {
  return {alt};
};

export default Image;

Dalam contoh ini, setiap gambar dibungkus dalam komponen <Suspense>, sehingga pesan pemuatan akan ditampilkan untuk setiap gambar saat sedang dimuat. Ini mencegah seluruh halaman terblokir saat gambar sedang diunduh.

Teknik Lanjutan dan Pertimbangan

1. Error Boundaries

Saat menggunakan lazy loading, penting untuk menangani potensi kesalahan yang mungkin terjadi selama proses pemuatan. Error boundaries dapat digunakan untuk menangkap kesalahan ini dan menampilkan UI fallback. Anda dapat membuat komponen error boundary seperti ini:


import React, { Component } from 'react';

class ErrorBoundary extends Component {
  constructor(props) {
    super(props);
    this.state = { hasError: false };
  }

  static getDerivedStateFromError(error) {
    // Perbarui state sehingga render berikutnya akan menampilkan UI fallback.
    return { hasError: true };
  }

  componentDidCatch(error, errorInfo) {
    // Anda juga dapat mencatat kesalahan ke layanan pelaporan kesalahan
    console.error(error, errorInfo);
  }

  render() {
    if (this.state.hasError) {
      // Anda dapat merender UI fallback kustom apa pun
      return 

Terjadi kesalahan.

; } return this.props.children; } } export default ErrorBoundary;

Kemudian bungkus komponen <Suspense> dengan <ErrorBoundary>:



  Loading...}>
    
  


Jika terjadi kesalahan saat memuat MyComponent, <ErrorBoundary> akan menangkapnya dan menampilkan UI fallback.

2. Server-Side Rendering (SSR) dan Lazy Loading

Lazy loading juga dapat digunakan bersama dengan server-side rendering (SSR) untuk meningkatkan waktu muat awal aplikasi Anda. Namun, ini memerlukan beberapa konfigurasi tambahan. Anda harus memastikan bahwa server dapat menangani impor dinamis dengan benar dan bahwa komponen yang di-lazy load dihidrasi dengan benar di sisi klien.

Alat seperti Next.js dan Gatsby.js menyediakan dukungan bawaan untuk lazy loading dan code splitting di lingkungan SSR, membuat prosesnya jauh lebih mudah.

3. Pramuat (Preloading) Komponen yang Di-Lazy Load

Dalam beberapa kasus, Anda mungkin ingin melakukan pramuat (preload) pada komponen yang di-lazy load sebelum benar-benar dibutuhkan. Ini bisa berguna untuk komponen yang kemungkinan akan segera dirender, seperti komponen yang terletak di bawah lipatan halaman tetapi kemungkinan akan digulir ke dalam tampilan. Anda dapat melakukan pramuat komponen dengan memanggil fungsi import() secara manual:


import('./MyComponent'); // Pramuat MyComponent

Ini akan mulai memuat komponen di latar belakang, sehingga akan tersedia lebih cepat saat benar-benar dirender.

4. Impor Dinamis dengan Komentar Ajaib (Magic Comments) Webpack

"Komentar ajaib" Webpack menyediakan cara untuk menyesuaikan nama dari potongan kode yang dihasilkan. Ini dapat membantu untuk debugging dan menganalisis struktur bundle aplikasi Anda. Sebagai contoh:


const MyComponent = React.lazy(() => import(/* webpackChunkName: "my-component" */ './MyComponent'));

Ini akan membuat potongan kode bernama "my-component.js" (atau yang serupa) alih-alih nama generik.

5. Menghindari Kesalahan Umum

Contoh Dunia Nyata dan Kasus Penggunaan

Lazy loading dapat diterapkan pada berbagai skenario untuk meningkatkan kinerja aplikasi React. Berikut beberapa contohnya:

Contoh: Situs Web E-commerce Internasional

Bayangkan sebuah situs web e-commerce yang menjual produk secara global. Negara yang berbeda mungkin memiliki mata uang, bahasa, dan katalog produk yang berbeda. Alih-alih memuat semua data untuk setiap negara di awal, Anda dapat menggunakan lazy loading untuk memuat data yang spesifik untuk lokasi pengguna hanya ketika mereka mengunjungi situs tersebut.


const CurrencyFormatter = React.lazy(() => import(`./CurrencyFormatter/${userCountry}`))
const ProductCatalog = React.lazy(() => import(`./ProductCatalog/${userCountry}`))

function ECommerceSite() {
  const userCountry = getUserCountry(); // Fungsi untuk menentukan negara pengguna

  return (
    Memuat konten untuk wilayah Anda...}>
      
      
    
  );
}

Kesimpulan

Lazy loading dan code splitting komponen adalah teknik yang ampuh untuk mengoptimalkan kinerja aplikasi React. Dengan memuat komponen hanya saat dibutuhkan, Anda dapat secara signifikan mengurangi waktu muat awal, meningkatkan pengalaman pengguna, dan memperkuat SEO Anda. Komponen bawaan React, React.lazy() dan <Suspense>, memudahkan penerapan lazy loading dalam proyek Anda. Terapkan teknik ini untuk membangun aplikasi web yang lebih cepat, lebih responsif, dan lebih menarik bagi audiens global.

Ingatlah untuk selalu mempertimbangkan pengalaman pengguna saat menerapkan lazy loading. Sediakan UI fallback yang informatif, tangani potensi kesalahan dengan baik, dan analisis kinerja aplikasi Anda dengan cermat untuk memastikan Anda mencapai hasil yang diinginkan. Jangan takut untuk bereksperimen dengan berbagai pendekatan dan temukan solusi terbaik untuk kebutuhan spesifik Anda.