Performance Optimization
React.memo, useMemo, useCallback, lazy
Tujuan Pembelajaran
- Memahami React rendering behavior
- Bisa mengoptimasi performa React
Analogi
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
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
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.