Lewati ke konten utama
menjadi.dev
Chapter 16.16 Performance Menengah

Performance Optimization

React.memo, useMemo, useCallback, lazy

Tujuan Pembelajaran

  • Memahami React rendering behavior
  • Bisa mengoptimasi performa React

Analogi

Diagram

      React = Pelukis yang menggambar ulang seluruh kanvas
Optimization = Pelukis pintar yang hanya gambar bagian yang berubah
    

Optimasi React fokus pada mengurangi re-render yang tidak perlu

Penjelasan Konsep

Performance optimization

Performance optimization di React dimulai dari pengukuran, bukan dari menabur memoization di semua tempat. Gunakan React DevTools Profiler untuk mencari component yang benar-benar mahal.

React.memo

Component hanya re-render jika props berubah. Berguna untuk component mahal yang sering menerima props sama. Jika React Compiler aktif, banyak memoization component bisa ditangani otomatis.

useMemo

Cache hasil komputasi mahal. Jangan dipakai untuk kalkulasi kecil yang murah.

useCallback

Stabilkan function identity saat callback dikirim ke component memoized atau dependency effect yang sensitif.

Lazy Loading

Code-split per route dengan React.lazy dan Suspense.

Virtualization

Hanya render item yang visible di viewport. Gunakan TanStack Virtual atau react-window untuk list panjang.

Inti yang Perlu Dipahami

Bagian ini berfokus pada memahami React rendering behavior., dan bisa mengoptimasi performa React. Jangan terburu-buru menghafal istilahnya. Lebih penting untuk memahami peran setiap konsep dan kapan konsep itu muncul dalam pekerjaan web development.

Saat membaca Performance Optimization, gunakan tujuan belajar sebagai penanda arah. Kalau kamu sudah bisa menjelaskan tujuan itu dengan kata-katamu sendiri, berarti fondasinya mulai terbentuk.

Cara Membayangkannya

Optimasi React fokus pada mengurangi re-render yang tidak perlu. Analogi ini dipakai supaya konsep teknis tidak terasa melayang. Hubungkan setiap istilah dengan perannya: siapa yang meminta, siapa yang memproses, data apa yang berpindah, dan hasil apa yang diharapkan.

Kalau analoginya sudah terasa masuk akal, barulah lihat istilah teknisnya. Cara ini membuat materi lebih mudah dipahami daripada langsung menghafal definisi.

Saat Melihat Contoh Kode

Contoh kode pada chapter ini memakai bahasa tsx. Bacalah contoh kode sebagai ilustrasi alur, bukan sebagai bagian yang harus langsung dihafal. Profiling dulu, baru pilih optimasi. React.memo, useMemo, dan useCallback adalah alat untuk bottleneck nyata, bukan default untuk semua component.

Perhatikan nama fungsi, urutan langkah, dan data yang berpindah. Biasanya tiga hal itu sudah cukup untuk memahami hubungan antara teori dan praktik.

Konteks dalam Perjalanan Belajar

Setiap konsep di platform ini dipilih karena dipakai di industri. Fokus pada pemahaman, bukan hafalan.

Kamu sudah di bagian lanjutan. Mulai pikirkan bagaimana konsep ini dipakai di dunia kerja — bukan hanya untuk belajar, tapi untuk membangun produk nyata.

Gunakan pertanyaan reflektif dan prompt AI di akhir chapter sebagai latihan aktif. Membaca saja tidak cukup — kamu perlu menjelaskan ulang dengan kata-katamu sendiri.

Contoh Kode

tsx
import { memo, useMemo, useCallback, useState } from 'react';

// REACT.MEMO — HINDARI RE-RENDER JIKA PROPS SAMA
const ExpensiveList = memo(function ExpensiveList({ items, onSelect }) {
  console.log('List rendered');
  return (
    <ul>
      {items.map(item => (
        <li key={item.id} onClick={() => onSelect(item)}>
          {item.name}
        </li>
      ))}
    </ul>
  );
});

// USEMEMO — CACHE HASIL KOMPUTASI
function Dashboard({ data, filter }) {
  const filteredData = useMemo(() => {
    return data.filter(item => item.category === filter);
  }, [data, filter]);
  
  return <ExpensiveList items={filteredData} />;
}

// USECALLBACK — STABILKAN FUNGSI
function Parent() {
  const [count, setCount] = useState(0);
  
  // Tanpa useCallback, handleSelect baru tiap render
  // -> ExpensiveList re-render meski props items sama
  const handleSelect = useCallback((item) => {
    console.log('Selected:', item);
  }, []);
  
  return (
    <div>
      <button onClick={() => setCount(c => c + 1)}>{count}</button>
      <ExpensiveList items={items} onSelect={handleSelect} />
    </div>
  );
}

Penjelasan Kode

Profiling dulu, baru pilih optimasi. React.memo, useMemo, dan useCallback adalah alat untuk bottleneck nyata, bukan default untuk semua component.

Prompt AI

Bagaimana cara memutuskan apakah memoization benar-benar diperlukan di React?

Pertanyaan Reflektif

Profile aplikasi dengan React DevTools. Identifikasi dan fix unnecessary re-renders.