Kompresi Gambar Batch untuk Pengembang Web | Bulk Image Compressor

Gambar adalah aset terberat di sebagian besar website. Pada halaman rata-rata, gambar menyumbang 40 hingga 60% dari total berat. Jika Anda seorang pengembang web dan tidak mengompresi gambar, Anda mengirimkan halaman yang membengkak tidak peduli seberapa bersih kode Anda.

Pertanyaannya bukan apakah akan mengompresi. Tetapi di mana dalam alur kerja Anda kompresi harus terjadi dan alat mana yang cocok untuk setiap situasi.

Di mana kompresi gambar cocok dalam alur kerja pengembangan

Ada tiga titik utama di mana Anda dapat mengompresi gambar selama pengembangan:

Sebelum commit. Anda mengoptimalkan gambar secara lokal sebelum mereka masuk ke version control. Ini menjaga repository Anda tetap ramping dan berarti setiap environment (staging, production, mesin pengembang lain) mendapatkan versi yang dioptimalkan secara otomatis.

Selama build. Alat build seperti Vite atau webpack menangani kompresi sebagai bagian dari pipeline aset. Gambar sumber tetap berkualitas penuh di repo, dan proses build menghasilkan versi yang dioptimalkan untuk deployment.

Di layer CDN. Layanan seperti Cloudflare, Imgix, atau Cloudinary mentransformasi dan mengompresi gambar dengan cepat berdasarkan perangkat dan browser yang meminta.

Setiap pendekatan memiliki tradeoff, dan Anda dapat menggabungkannya.

Alat online vs plugin build

Untuk tugas satu kali yang cepat, seperti mengompresi kumpulan screenshot untuk posting blog atau mengoptimalkan set ikon, alat online adalah opsi tercepat. Buka Bulk Image Compressor, masukkan file Anda, atur kualitas, dan unduh. Selesai dalam waktu kurang dari satu menit.

Plugin build menangani optimasi berkelanjutan secara otomatis. Berikut tampilannya dalam praktik.

Vite

Pengguna Vite dapat menggunakan vite-plugin-imagemin atau plugin serupa:

// vite.config.js
import imagemin from 'vite-plugin-imagemin';

export default {
  plugins: [
    imagemin({
      mozjpeg: { quality: 80 },
      webp: { quality: 80 },
      pngquant: { quality: [0.7, 0.8] },
    }),
  ],
};

Ini mengompresi gambar selama vite build. File sumber tetap tidak tersentuh. Direktori output mendapatkan versi yang dioptimalkan.

webpack

Dengan webpack, image-minimizer-webpack-plugin melakukan pekerjaan yang sama:

const ImageMinimizerPlugin = require('image-minimizer-webpack-plugin');

module.exports = {
  optimization: {
    minimizer: [
      new ImageMinimizerPlugin({
        minimizer: {
          implementation: ImageMinimizerPlugin.sharpMinify,
          options: {
            encodeOptions: {
              jpeg: { quality: 80 },
              webp: { quality: 80 },
            },
          },
        },
      }),
    ],
  },
};

Kapan menggunakan yang mana

Gunakan alat online ketika:

  • Anda menambahkan beberapa gambar ke proyek dan ingin mengoptimalkannya sekarang juga
  • Anda bekerja dengan konten dari klien atau desainer yang mengirim file tidak dioptimalkan
  • Proyek Anda tidak memiliki langkah build (HTML statis, situs sederhana)
  • Anda ingin memeriksa hasil kompresi secara visual sebelum commit

Gunakan plugin build ketika:

  • Proyek Anda sudah memiliki pipeline build
  • Banyak pengembang yang menyumbangkan gambar dan Anda menginginkan optimasi yang konsisten
  • Anda perlu konversi format (misalnya, menghasilkan versi WebP secara otomatis)
  • Anda ingin gambar sumber berkualitas penuh di repo untuk kemungkinan pemrosesan ulang di masa depan

Optimasi gambar CI/CD

Plugin build berjalan selama build lokal, tetapi Anda juga dapat menambahkan optimasi gambar ke pipeline CI/CD Anda. Ini menangkap gambar yang tidak dioptimalkan yang lolos, terlepas dari siapa yang melakukan commit.

Pendekatan sederhana adalah menjalankan skrip di pipeline CI Anda yang memeriksa ukuran file gambar:

# Gagalkan build jika ada gambar yang lebih besar dari 500KB
find public/images -type f \( -name "*.jpg" -o -name "*.png" -o -name "*.webp" \) -size +500k | tee oversized.txt
if [ -s oversized.txt ]; then
  echo "Ditemukan gambar terlalu besar. Kompres sebelum deploy."
  exit 1
fi

Untuk kompresi otomatis di CI, alat seperti sharp-cli atau imagemin-cli dapat memproses gambar sebagai langkah build. Ini menjamin bahwa tidak ada yang masuk ke production tanpa dikompresi.

Lazy loading dan gambar responsif

Kompresi saja tidak cukup. Cara Anda memuat gambar juga sama pentingnya.

Lazy loading menunda gambar di luar layar hingga pengguna scroll ke sana. Tambahkan loading="lazy" ke setiap gambar di bawah lipatan. Jangan lazy load gambar hero Anda atau konten apa pun yang terlihat saat pemuatan halaman awal, karena itu akan merusak skor Largest Contentful Paint Anda.

Gambar responsif menyajikan ukuran berbeda berdasarkan lebar layar. Ponsel tidak membutuhkan gambar 2400px yang ditujukan untuk monitor desktop. Gunakan atribut srcset dan sizes untuk membiarkan browser memilih versi yang tepat:

<img
  src="product-800.webp"
  srcset="product-400.webp 400w, product-800.webp 800w, product-1600.webp 1600w"
  sizes="(max-width: 640px) 400px, (max-width: 1024px) 800px, 1600px"
  alt="Foto produk"
  width="1600"
  height="1067"
  loading="lazy"
>

Hasilkan varian ukuran ini sebagai bagian dari proses build Anda atau dengan alat batch sebelum mengunggah.

Pengiriman CDN

CDN (Content Delivery Network) menyajikan gambar dari server yang secara geografis dekat dengan pengunjung Anda. Ini mengurangi latensi, tetapi beberapa CDN melangkah lebih jauh dengan optimasi gambar on-the-fly.

Cloudflare Image Resizing dapat mengubah ukuran dan mengonversi gambar ke WebP atau AVIF secara otomatis berdasarkan browser pengunjung. Anda tidak perlu menghasilkan varian sendiri.

Imgix dan Cloudinary adalah CDN gambar khusus. Anda mengunggah satu sumber berkualitas tinggi, dan mereka menghasilkan ukuran, format, dan kualitas apa pun yang Anda minta melalui parameter URL. Ini kuat tetapi menambah biaya per gambar.

Untuk sebagian besar proyek, mengompresi gambar sebelum unggah dan menyajikannya melalui CDN standar (Cloudflare, Fastly, AWS CloudFront) sudah cukup. CDN gambar khusus masuk akal ketika Anda memiliki ribuan gambar yang diunggah pengguna dan membutuhkan pengubahan ukuran dinamis. Untuk latar belasan mengapa kompresi penting untuk web, panduan kami tentang mengapa gambar website perlu kompresi mencakup dasar-dasarnya.

Kesalahan umum yang dilakukan pengembang

Melakukan commit gambar yang tidak dioptimalkan. JPEG 5MB di repo Anda akan tetap ada di riwayat git selamanya, bahkan jika Anda menggantinya nanti. Kompres sebelum commit.

Menggunakan PNG untuk foto. PNG ditujukan untuk grafik, screenshot, dan gambar dengan transparansi. Foto yang disimpan sebagai PNG biasanya 3 hingga 5 kali lebih besar dari gambar yang sama sebagai JPEG atau WebP. Gunakan format yang tepat untuk jenis konten. Lihat panduan perbandingan format kami untuk detailnya.

Melewatkan atribut width dan height. Tanpa dimensi eksplisit, browser tidak tahu berapa banyak ruang yang harus disediakan untuk gambar hingga gambar dimuat. Ini menyebabkan pergeseran tata letak, yang merusak skor CLS dan mengganggu pengguna.

Over-kompresi. Menurunkan kualitas ke 30 atau 40% untuk mendapatkan file kecil menghasilkan artefak yang terlihat. Untuk gambar web, kualitas 75 hingga 82% mencapai keseimbangan yang tepat antara ukuran dan tampilan.

Mengabaikan dimensi gambar. Mengompresi foto 4000px ke kualitas 80% itu bagus, tetapi jika ditampilkan dengan lebar 600px di halaman Anda, Anda masih mengirim lebih banyak piksel dari yang diperlukan. Ubah ukuran ke dimensi tampilan Anda terlebih dahulu, lalu kompres.

Tidak menggunakan WebP. Dukungan browser untuk WebP sudah universal sekarang. Jika Anda masih hanya menyajikan JPEG dan PNG, Anda membiarkan penghematan ukuran file 25 hingga 35% terbuang sia-sia.

Pendekatan praktis

Untuk sebagian besar proyek web, berikut yang berfungsi dengan baik:

  1. Ubah ukuran dan kompres gambar sebelum commit, menggunakan alat online seperti Bulk Image Compressor atau skrip lokal.
  2. Tambahkan plugin build sebagai jaring pengaman untuk menangkap apa pun yang lolos.
  3. Gunakan lazy loading dan gambar responsif di HTML Anda.
  4. Sajikan melalui CDN.

Anda tidak perlu melakukan keempatnya pada hari pertama. Mulailah dengan langkah pertama. Itu saja sudah akan membuat perbedaan nyata dalam waktu muat halaman Anda.

Ready to compress your images?

Bulk compress JPEG, PNG, WebP, and AVIF images right in your browser. No uploads, no sign-ups.

Try Bulk Image Compressor