Optimasi Gambar di React.js

1. Mengapa Gambar Perlu Dioptimasi?

Gambar sering menjadi penyebab utama lambatnya website karena ukurannya besar. Optimasi gambar membantu:

  • Mempercepat loading halaman.

  • 📉 Mengurangi ukuran file dan penggunaan bandwidth.

  • 📱 Meningkatkan performa di perangkat mobile.

  • 🌐 Meningkatkan skor SEO (Core Web Vitals).

Menurut Google, 70% waktu loading halaman sering disebabkan oleh ukuran gambar yang tidak dioptimalkan.


2. Jenis Format Gambar yang Umum

Format
Deskripsi
Kelebihan
Kekurangan

JPG/JPEG

Format umum untuk foto

Ukuran kecil, support luas

Kualitas turun saat dikompresi

PNG

Gambar transparan / UI

Kualitas tinggi

Ukuran besar

WEBP

Format modern

Ukuran lebih kecil, transparansi, animasi

Tidak didukung browser lama

SVG

Gambar berbasis vektor

Ringan dan scalable

Tidak cocok untuk foto

💡 Gunakan WebP atau SVG jika memungkinkan.


3. Teknik Dasar Optimasi Gambar

Berikut beberapa langkah umum sebelum gambar digunakan di React:

✅ 1. Compress sebelum upload

Gunakan tool seperti:

✅ 2. Gunakan ukuran sesuai kebutuhan

Jangan gunakan gambar 3000px untuk ditampilkan 300px di layar.

✅ 3. Gunakan format modern (WebP)

Konversi gambar JPG/PNG ke WebP menggunakan tool online atau plugin build.


4. Mengimpor dan Menampilkan Gambar di React

Simpan gambar di src/assets/images/.

import React from 'react';
import logo from './assets/images/logo.webp';

function App() {
  return (
    <div style={{ textAlign: 'center' }}>
      <h1>Optimasi Gambar di React</h1>
      <img src={logo} alt="Logo" width="200" loading="lazy" />
    </div>
  );
}

export default App;

Penjelasan:

  • loading="lazy" → gambar hanya dimuat saat terlihat di layar (lazy loading).

  • alt → penting untuk SEO dan aksesibilitas.

  • Pastikan gambar tidak terlalu besar.


5. Teknik Lazy Loading (Manual & Library)

1️⃣ Lazy Loading Native (HTML5)

HTML modern sudah mendukung atribut:

<img src="image.webp" alt="gambar" loading="lazy" />

Ini cara termudah dan bekerja di semua browser modern.


2️⃣ Lazy Loading dengan Library

Instal library:

npm install react-lazy-load-image-component

Gunakan seperti berikut:

import React from 'react';
import { LazyLoadImage } from 'react-lazy-load-image-component';
import 'react-lazy-load-image-component/src/effects/blur.css';

function Gallery() {
  return (
    <div>
      <h2>Galeri Gambar</h2>
      <LazyLoadImage
        alt="Nature"
        effect="blur"
        src="https://picsum.photos/800/400"
        width="100%"
      />
    </div>
  );
}

export default Gallery;

💡 Efek blur memberikan tampilan halus saat gambar dimuat.


6. Gunakan Responsive Image (srcset & sizes)

React juga mendukung tag HTML srcset agar browser memilih ukuran gambar sesuai layar.

<img
  src="images/hero-800.webp"
  srcSet="
    images/hero-400.webp 400w,
    images/hero-800.webp 800w,
    images/hero-1200.webp 1200w
  "
  sizes="(max-width: 600px) 400px, 800px"
  alt="Hero"
  loading="lazy"
/>

💡 Browser otomatis memilih gambar dengan resolusi sesuai ukuran layar pengguna.


7. Optimasi Gambar di Build Production

Saat menjalankan:

npm run build

React akan:

  • Menyalin gambar ke folder build/static/media

  • Mengoptimalkan file (rename & compress otomatis dengan webpack)

Namun untuk hasil maksimal, kamu dapat:

  • Menggunakan plugin image-webpack-loader

  • Mengompres manual sebelum build

Contoh konfigurasi tambahan (untuk proyek custom Webpack):

npm install image-webpack-loader --save-dev

8. Optimasi Gambar dengan Cloudinary

Jika kamu menyimpan gambar di Cloudinary, kamu bisa memanfaatkan fitur optimasi otomatis.

<img
  src="https://res.cloudinary.com/demo/image/upload/f_auto,q_auto,w_600/sample.jpg"
  alt="Optimized Cloudinary"
/>

Keterangan:

  • f_auto → format otomatis (misalnya WebP di browser modern)

  • q_auto → kualitas otomatis berdasarkan kecepatan jaringan

  • w_600 → ubah ukuran lebar ke 600px

⚡ Hasilnya, ukuran gambar bisa berkurang hingga 70% tanpa mengorbankan kualitas.


9. Tips Tambahan Optimasi

Tips
Penjelasan

✅ Gunakan format WebP

Ukuran lebih kecil, kualitas tinggi

✅ Tambahkan atribut width dan height

Membantu browser memesan ruang sebelum gambar dimuat

✅ Gunakan lazy loading

Hindari memuat gambar di luar viewport

✅ Gunakan CDN (misalnya Cloudinary, Imgix)

Pengiriman gambar lebih cepat

✅ Gunakan cache browser

React otomatis membantu caching di build

❌ Hindari base64 besar di inline CSS

Membebani file JS


10. Contoh Mini Project Optimasi Gambar

import React from 'react';
import { LazyLoadImage } from 'react-lazy-load-image-component';
import hero from './assets/images/hero.webp';

function OptimizedImageDemo() {
  return (
    <div style={{ textAlign: 'center', padding: '40px' }}>
      <h1>Contoh Optimasi Gambar React</h1>
      <LazyLoadImage
        src={hero}
        alt="Hero Banner"
        width="70%"
        effect="blur"
        loading="lazy"
      />
      <p>Gambar ini dimuat secara malas (lazy load) dan dikompresi format WebP.</p>
    </div>
  );
}

export default OptimizedImageDemo;

Last updated