Ketika Anda pertama kali belajar menyisipkan gambar ke halaman web menggunakan tag <img>, fokus utama biasanya hanya pada memunculkan gambar di layar. Namun setelah berhasil melakukan itu, muncul pertanyaan berikutnya yang jauh lebih berdampak: apakah gambar tersebut sudah benar-benar optimal? Gambar yang tidak dioptimasi adalah salah satu penyebab utama halaman web terasa berat dan lambat dimuat. Sebuah halaman yang berisi sepuluh gambar beresolusi tinggi tanpa optimasi apapun bisa memakan bandwidth puluhan megabyte hanya untuk satu kunjungan. Bagi pengguna dengan koneksi internet terbatas atau perangkat mobile, ini bisa berarti pengalaman yang sangat buruk atau bahkan halaman yang gagal dimuat sepenuhnya. Artikel ini hadir untuk menjawab pertanyaan-pertanyaan yang sering dihadapi pemula setelah menguasai dasar penyisipan gambar: format mana yang sebaiknya digunakan, apa perbedaan nyata antara WebP, JPG, dan PNG, serta bagaimana atribut loading="lazy" dapat secara signifikan meringankan beban halaman tanpa menulis satu pun baris JavaScript.
Kabar baiknya adalah semua teknik yang akan dibahas dalam artikel ini tidak memerlukan library atau framework tambahan. Semuanya merupakan fitur standar HTML modern yang didukung oleh seluruh browser utama. Anda hanya perlu memahami kapan dan bagaimana menggunakannya. Kami akan membahas secara bertahap, mulai dari memahami cara kerja masing-masing format gambar dari sudut pandang teknis yang sederhana, kemudian mempelajari atribut-atribut HTML yang tepat, hingga mempraktikkan semuanya dalam sebuah halaman HTML yang bisa langsung Anda buka di browser. Tidak ada prasyarat khusus selain kemampuan dasar menyisipkan gambar dengan <img src="..." alt="..."> dan memiliki editor teks serta browser modern seperti Google Chrome, Firefox, atau Microsoft Edge yang sudah diperbarui. Setelah menyelesaikan panduan ini, Anda akan mampu membuat keputusan format gambar yang tepat dan menulis kode HTML yang lebih efisien untuk setiap proyek web Anda.
Landasan Sains dan Prinsip Kerja Metode
Setiap format gambar digital menggunakan algoritma kompresi yang berbeda untuk mengurangi ukuran file. Memahami prinsip dasarnya akan membantu Anda membuat keputusan yang tepat. Format JPG (atau JPEG) menggunakan kompresi lossy, artinya sebagian data gambar dibuang secara permanen saat proses penyimpanan. Algoritma ini bekerja dengan memanfaatkan keterbatasan mata manusia: mata kita kurang sensitif terhadap perubahan warna halus dibandingkan perubahan kecerahan, sehingga informasi warna yang tidak terlalu kentara dapat dikurangi tanpa terlalu terasa. Hasilnya adalah file yang jauh lebih kecil dibanding data gambar mentah, namun dengan potensi penurunan kualitas yang meningkat seiring tingkat kompresi. JPG sangat cocok untuk foto-foto dengan gradasi warna yang kompleks, seperti foto potret, lanskap, atau produk. Format ini tidak mendukung transparansi (latar belakang transparan) dan tidak ideal untuk gambar dengan tepi tajam atau teks karena kompresinya dapat menciptakan artefak visual berupa kotak-kotak kecil yang disebut blocking artifact.
Format PNG menggunakan kompresi lossless, yang berarti tidak ada data yang dibuang selama penyimpanan. File PNG yang didekompresi akan menghasilkan data piksel yang identik dengan aslinya. Ini menjadikan PNG pilihan terbaik untuk gambar yang memerlukan ketajaman mutlak, seperti logo, ikon, ilustrasi garis, tangkapan layar antarmuka, atau gambar yang mengandung teks. PNG juga mendukung transparansi penuh melalui saluran alpha, memungkinkan bagian tertentu dari gambar menjadi transparan sehingga latar belakang halaman terlihat tembus. Konsekuensinya, ukuran file PNG umumnya lebih besar dibanding JPG untuk jenis konten yang sama, khususnya untuk foto-foto yang kaya warna. Format WebP dikembangkan oleh Google dan merupakan format modern yang dirancang untuk menggabungkan keunggulan keduanya: WebP mendukung kompresi lossy dan lossless, sekaligus mendukung transparansi (seperti PNG) dan animasi. Dalam kondisi kualitas visual yang setara, WebP lossy dapat menghasilkan file 25–35% lebih kecil dibanding JPG, sementara WebP lossless dapat 26% lebih kecil dibanding PNG berdasarkan dokumentasi resmi Google. WebP didukung oleh seluruh browser modern utama sejak sekitar tahun 2020.
Atribut loading="lazy" pada elemen <img> merupakan fitur HTML standar yang diimplementasikan di tingkat browser, bukan JavaScript. Tanpa atribut ini, browser secara default mengunduh semua gambar di seluruh halaman segera setelah HTML diparse, terlepas dari apakah gambar tersebut berada di area yang terlihat oleh pengguna (viewport) atau jauh di bawah area yang dapat dilihat. Perilaku default ini disebut eager loading. Dengan loading="lazy", browser menunda pengunduhan gambar yang berada di luar viewport hingga pengguna menggulir halaman mendekati posisi gambar tersebut. Mekanisme penundaan ini disebut lazy loading atau pemuatan malas. Hasilnya nyata: waktu muat awal halaman menjadi lebih cepat karena bandwidth dan sumber daya jaringan difokuskan hanya pada konten yang langsung terlihat. Penting dipahami bahwa loading="lazy" tidak boleh diterapkan pada gambar yang berada di bagian atas halaman (above the fold), seperti logo atau gambar hero utama, karena justru akan memperlambat kemunculan konten yang paling penting bagi pengguna.
Formula, Komposisi Bahan, atau Spesifikasi Parameter
Tabel berikut merangkum spesifikasi teknis dan parameter penting dari elemen, atribut, serta format yang akan Anda gunakan dalam praktik optimasi gambar HTML. Memahami setiap komponen ini akan membantu Anda menentukan kombinasi yang paling tepat sesuai kebutuhan konten gambar pada halaman Anda.
| Komponen | Spesifikasi/Rasio | Fungsi Teknis |
|---|---|---|
| Format JPG/JPEG | Kompresi lossy, tidak ada transparansi, kualitas 0–100 | Menyimpan foto dengan ukuran file kecil; cocok untuk gambar dengan gradasi warna kompleks |
| Format PNG | Kompresi lossless, mendukung alpha channel (transparansi) | Menyimpan gambar dengan ketajaman penuh; cocok untuk logo, ikon, dan gambar berteks |
| Format WebP | Kompresi lossy dan lossless, mendukung transparansi dan animasi | Format modern yang menghasilkan file lebih kecil dibanding JPG/PNG dengan kualitas setara |
| Elemen <picture> | Elemen HTML kontainer untuk sumber gambar alternatif | Memungkinkan browser memilih format gambar terbaik yang didukung, termasuk WebP sebagai prioritas |
| Elemen <source> | Atribut type untuk MIME type, srcset untuk URL | Mendefinisikan sumber gambar alternatif di dalam <picture> dengan kondisi atau format tertentu |
Atribut loading="lazy" | Nilai: lazy atau eager (default) | Menunda pengunduhan gambar di luar viewport hingga pengguna menggulir mendekatinya |
Atribut width dan height | Nilai integer piksel tanpa satuan pada atribut HTML | Mencegah pergeseran tata letak (layout shift) saat gambar dimuat; browser dapat mereservasi ruang |
Atribut alt | Teks deskriptif singkat tentang isi gambar | Aksesibilitas untuk pembaca layar; ditampilkan jika gambar gagal dimuat; penting untuk SEO |
Atribut decoding="async" | Nilai: async, sync, atau auto | Meminta browser mendekode gambar secara asinkron agar tidak memblokir thread utama rendering |
| MIME type WebP | image/webp | Nilai yang digunakan pada atribut type elemen <source> agar browser mengenali format WebP |
loading="lazy" hanya berfungsi optimal jika atribut width dan height juga dicantumkan pada elemen <img>. Tanpa dimensi tersebut, browser tidak dapat menghitung posisi gambar relatif terhadap viewport, sehingga perilaku lazy loading bisa tidak akurat. Selain itu, jangan menerapkan loading="lazy" pada gambar yang langsung terlihat saat halaman pertama dibuka (gambar hero, logo di header), karena ini justru akan memperlambat tampilan awal halaman secara signifikan.Panduan Langkah Kerja Bertahap
Menyiapkan Struktur Folder dan File Gambar
Sebelum menulis kode HTML, Anda perlu menyiapkan struktur folder yang rapi dan menyediakan gambar dalam format yang akan diuji. Buat sebuah folder baru di komputer Anda dengan nama latihan-optimasi-gambar. Di dalam folder tersebut, buat subfolder bernama images untuk menyimpan seluruh file gambar. Struktur yang terorganisasi seperti ini akan mempermudah pengelolaan file saat proyek berkembang.
Untuk keperluan latihan ini, Anda memerlukan tiga versi dari gambar yang sama dalam format berbeda: satu file foto-produk.jpg, satu file foto-produk.webp, dan satu file logo.png yang idealnya memiliki latar belakang transparan. Jika Anda belum memiliki file WebP, Anda dapat mengonversi gambar JPG yang ada menggunakan layanan daring gratis seperti Squoosh (squoosh.app) yang dikembangkan oleh Google, atau menggunakan aplikasi seperti GIMP, Photoshop, atau ImageMagick. Di Squoosh, cukup unggah gambar JPG Anda, pilih format WebP pada kolom kanan, atur kualitas (disarankan antara 75–85 untuk keseimbangan ukuran dan kualitas), lalu unduh hasilnya. Setelah semua file siap, struktur folder Anda seharusnya terlihat seperti ini:
latihan-optimasi-gambar/
├── index.html
└── images/
├── foto-produk.jpg
├── foto-produk.webp
└── logo.png
Verifikasi: Pastikan semua file gambar benar-benar ada di dalam folder images/ sebelum melanjutkan ke langkah berikutnya. Buka folder menggunakan File Explorer (Windows) atau Finder (macOS) dan konfirmasi keberadaan ketiga file tersebut. Jika salah satu file belum ada, buat atau unduh placeholder gambar apapun lalu ganti namanya sesuai di atas.
Membuat Kerangka Halaman HTML dengan Gambar JPG Dasar
Mulailah dengan membuat file index.html di dalam folder latihan-optimasi-gambar/. Pada langkah ini, kita akan menyisipkan gambar JPG menggunakan tag <img> biasa terlebih dahulu, sebagai titik awal sebelum dioptimasi. Ini penting agar Anda dapat membandingkan secara langsung perbedaan sebelum dan sesudah optimasi diterapkan. Perhatikan bahwa atribut width dan height sudah dicantumkan sejak awal karena keduanya berperan penting tidak hanya untuk tampilan, tetapi juga untuk mencegah pergeseran tata letak (dikenal sebagai Cumulative Layout Shift atau CLS) yang memengaruhi pengalaman pengguna.
Buat file index.html dengan isi berikut:
<!doctype html>
<html lang="id">
<head>
<meta charset="utf-8">
<title>Latihan Optimasi Gambar</title>
<style>
body { font-family: sans-serif; max-width: 800px; margin: 0 auto; padding: 20px; }
img { max-width: 100%; height: auto; display: block; margin-bottom: 16px; }
</style>
</head>
<body>
<h1>Toko Produk Kami</h1>
<h2>Logo Perusahaan (PNG)</h2>
<img src="images/logo.png"
alt="Logo Toko Produk Kami"
width="200"
height="80">
<h2>Foto Produk (JPG Dasar — Belum Dioptimasi)</h2>
<img src="images/foto-produk.jpg"
alt="Foto produk unggulan kami"
width="800"
height="533">
</body>
</html>
Simpan file tersebut, lalu buka dengan browser menggunakan cara klik dua kali pada file index.html atau menyeret file ke jendela browser. Anda seharusnya melihat logo PNG dan foto produk JPG tampil di halaman. Buka DevTools browser (tekan F12 atau Ctrl+Shift+I di Windows/Linux, Cmd+Option+I di macOS), lalu buka tab Network, dan muat ulang halaman. Perhatikan ukuran file gambar JPG yang diunduh di kolom Size. Catat angka ini sebagai acuan perbandingan setelah optimasi diterapkan.
Mengganti Gambar JPG dengan WebP Menggunakan Elemen <picture>
Elemen <picture> adalah cara yang direkomendasikan untuk menyajikan gambar WebP sambil tetap menyediakan fallback JPG bagi browser lama yang tidak mendukung WebP. Cara kerjanya sederhana: browser membaca elemen <source> dari atas ke bawah dan memilih yang pertama sesuai dengan kemampuannya. Jika browser mendukung image/webp, ia akan menggunakan file WebP. Jika tidak, browser akan jatuh ke elemen <img> di dalam <picture> sebagai fallback yang selalu didukung. Pola ini memastikan pengguna browser modern mendapat manfaat WebP, sementara pengguna browser lama tetap dapat melihat gambar.
Perbarui bagian foto produk di dalam file index.html Anda. Ganti blok gambar JPG yang lama dengan kode berikut:
<h2>Foto Produk (WebP dengan Fallback JPG)</h2>
<picture>
<source
type="image/webp"
srcset="images/foto-produk.webp">
<img
src="images/foto-produk.jpg"
alt="Foto produk unggulan kami"
width="800"
height="533">
</picture>
Simpan file dan muat ulang halaman di browser. Secara visual, gambar seharusnya terlihat identik. Namun buka kembali tab Network di DevTools dan perhatikan file mana yang sebenarnya diunduh. Pada browser modern seperti Chrome, Firefox, atau Edge terkini, Anda akan melihat bahwa browser mengunduh foto-produk.webp, bukan foto-produk.jpg. Bandingkan kolom Size antara file WebP yang diunduh sekarang dengan ukuran JPG yang Anda catat sebelumnya. Perbedaan ukurannya mencerminkan penghematan bandwidth nyata yang akan dirasakan pengguna halaman Anda.
Menambahkan Atribut loading="lazy" pada Gambar di Bawah Viewport
Sekarang kita akan menambahkan beberapa gambar produk tambahan yang disimulasikan berada jauh di bawah area yang langsung terlihat saat halaman pertama kali dibuka. Gambar-gambar inilah yang ideal untuk menerapkan loading="lazy". Ingat prinsip dasarnya: gambar yang pertama kali terlihat saat halaman dimuat (gambar hero, logo) tidak boleh menggunakan lazy loading. Hanya gambar yang berada di bawah fold — yaitu yang memerlukan pengguliran untuk dilihat — yang layak diberi atribut ini.
Tambahkan bagian galeri produk berikut ke dalam file index.html Anda, setelah blok <picture> dari langkah sebelumnya:
<h2>Galeri Produk Lainnya</h2>
<!-- Gambar ini jauh di bawah halaman: gunakan loading="lazy" -->
<picture>
<source type="image/webp" srcset="images/foto-produk.webp">
<img
src="images/foto-produk.jpg"
alt="Varian produk warna merah"
width="800"
height="533"
loading="lazy"
decoding="async">
</picture>
<picture>
<source type="image/webp" srcset="images/foto-produk.webp">
<img
src="images/foto-produk.jpg"
alt="Varian produk warna biru"
width="800"
height="533"
loading="lazy"
decoding="async">
</picture>
<picture>
<source type="image/webp" srcset="images/foto-produk.webp">
<img
src="images/foto-produk.jpg"
alt="Varian produk warna hijau"
width="800"
height="533"
loading="lazy"
decoding="async">
</picture>
Simpan file dan muat ulang halaman. Di tab Network DevTools, perhatikan kolom Waterfall atau urutkan berdasarkan waktu. Saat halaman pertama dimuat, browser seharusnya tidak langsung mengunduh ketiga gambar galeri tersebut. Gambar hanya akan diunduh saat Anda menggulir halaman ke bawah mendekati posisinya. Ini adalah verifikasi langsung bahwa loading="lazy" berfungsi: Anda dapat menyaksikan permintaan jaringan baru muncul di tab Network tepat saat Anda menggulir halaman ke bawah.
Menyusun Halaman Lengkap yang Menggabungkan Semua Teknik
Pada langkah ini, kita akan merapikan dan menyatukan semua teknik yang telah dipelajari ke dalam satu file index.html yang lengkap dan siap digunakan. File ini menunjukkan kapan menggunakan PNG (logo dengan transparansi), kapan menggunakan WebP dengan fallback JPG (foto produk utama tanpa lazy loading), dan kapan menambahkan loading="lazy" (gambar-gambar galeri di bawah fold). Ini adalah pola yang dapat langsung Anda adaptasi untuk proyek nyata.
Ganti seluruh isi file index.html dengan versi lengkap berikut:
<!doctype html>
<html lang="id">
<head>
<meta charset="utf-8">
<title>Toko Produk Kami — Gambar Teroptimasi</title>
<style>
body { font-family: sans-serif; max-width: 800px; margin: 0 auto; padding: 20px; }
img { max-width: 100%; height: auto; display: block; margin-bottom: 16px; }
.galeri { border-top: 2px solid #e4e6eb; margin-top: 32px; padding-top: 16px; }
</style>
</head>
<body>
<header>
<!-- Logo: gunakan PNG karena perlu transparansi; tidak pakai lazy loading -->
<img
src="images/logo.png"
alt="Logo Toko Produk Kami"
width="200"
height="80">
<h1>Toko Produk Kami</h1>
</header>
<main>
<h2>Produk Unggulan</h2>
<!-- Foto utama: WebP + fallback JPG; tidak pakai lazy loading (above the fold) -->
<picture>
<source type="image/webp" srcset="images/foto-produk.webp">
<img
src="images/foto-produk.jpg"
alt="Foto produk unggulan kami tampak depan"
width="800"
height="533">
</picture>
<div class="galeri">
<h2>Galeri Varian Produk</h2>
<!-- Gambar galeri: WebP + fallback JPG + lazy loading (below the fold) -->
<picture>
<source type="image/webp" srcset="images/foto-produk.webp">
<img
src="images/foto-produk.jpg"
alt="Varian produk warna merah"
width="800"
height="533"
loading="lazy"
decoding="async">
</picture>
<picture>
<source type="image/webp" srcset="images/foto-produk.webp">
<img
src="images/foto-produk.jpg"
alt="Varian produk warna biru"
width="800"
height="533"
loading="lazy"
decoding="async">
</picture>
<picture>
<source type="image/webp" srcset="images/foto-produk.webp">
<img
src="images/foto-produk.jpg"
alt="Varian produk warna hijau"
width="800"
height="533"
loading="lazy"
decoding="async">
</picture>
</div>
</main>
</body>
</html>
Simpan file dan buka di browser. Halaman seharusnya menampilkan logo, judul, foto produk utama, dan galeri. Verifikasi dengan membuka DevTools tab Network dan muat ulang halaman. Pastikan: (1) logo PNG diunduh segera, (2) foto produk utama menggunakan file WebP, (3) gambar galeri hanya diunduh saat Anda menggulir ke bawah. Ketiga kondisi ini mengonfirmasi semua teknik berfungsi dengan benar.
Memverifikasi Hasil dengan DevTools dan Memeriksa Ukuran File
Langkah terakhir adalah melakukan verifikasi menyeluruh untuk memastikan optimasi bekerja sebagaimana mestinya. Verifikasi ini penting agar Anda tidak hanya berasumsi bahwa kode sudah benar, tetapi benar-benar mengonfirmasi dampak nyata yang dihasilkan. Buka file index.html di browser Chrome atau Edge, lalu akses DevTools dengan menekan F12. Buka tab Network dan aktifkan opsi Disable cache (centang kotak tersebut di bagian atas tab Network) agar setiap muat ulang benar-benar mengunduh file dari awal tanpa menggunakan cache browser.
Muat ulang halaman dengan menekan Ctrl+Shift+R (hard reload). Perhatikan daftar file yang diunduh. Klik pada nama file gambar WebP di daftar tersebut untuk melihat detailnya. Di panel kanan, tab Headers akan menampilkan informasi seperti Content-Type: image/webp, yang mengonfirmasi browser benar-benar menerima file WebP. Kemudian perhatikan kolom Size pada baris file WebP dan bandingkan dengan ukuran file JPG yang sebelumnya Anda unduh. Selisihnya adalah ukuran data yang berhasil dihemat per pengguna per kunjungan. Setelah itu, gulir halaman ke bawah secara perlahan dan perhatikan tab Network — Anda akan melihat permintaan baru untuk gambar galeri muncul secara bertahap seiring pengguliran. Untuk mempertegas verifikasi lazy loading, Anda juga dapat menggunakan perintah berikut di tab Console DevTools untuk memeriksa atribut gambar secara programatis:
// Jalankan di Console DevTools untuk memeriksa atribut loading pada semua gambar
document.querySelectorAll('img').forEach(function(img) {
console.log(img.src, '| loading:', img.loading, '| decoding:', img.decoding);
});
Perintah JavaScript di atas bukan bagian dari file HTML Anda — ini adalah perintah inspeksi yang diketik langsung di Console DevTools. Output di console akan menampilkan URL setiap gambar beserta nilai atribut loading dan decoding-nya. Gambar logo dan foto produk utama seharusnya menampilkan loading: eager (nilai default), sementara gambar galeri menampilkan loading: lazy. Ini mengonfirmasi bahwa kode HTML Anda sudah ditulis dengan benar dan semua teknik optimasi aktif sesuai rencana.
Verifikasi Akhir dan Parameter Kelayakan
Tabel berikut merangkum parameter yang dapat Anda periksa secara langsung untuk mengonfirmasi bahwa halaman Anda sudah menerapkan optimasi gambar dengan benar. Kondisi "sebelum" menggambarkan keadaan halaman dengan gambar yang belum dioptimasi, sementara kolom "target" menggambarkan kondisi yang harus tercapai setelah seluruh langkah panduan ini diterapkan. Gunakan tabel ini sebagai checklist akhir sebelum menerbitkan halaman ke publik.
| Parameter | Sebelum Menerapkan Metode | Sesudah Menerapkan Metode (Target) |
|---|---|---|
| Format gambar foto yang diunduh browser | JPG diunduh untuk semua browser | WebP diunduh oleh browser modern; JPG sebagai fallback otomatis untuk browser lama |
| Perilaku pengunduhan gambar galeri | Semua gambar diunduh sekaligus saat halaman dimuat pertama kali | Gambar galeri hanya diunduh saat pengguna menggulir mendekati posisinya (terlihat di tab Network) |
| Keberadaan atribut width dan height pada <img> | Atribut tidak ada; potensi layout shift saat gambar dimuat | Setiap <img> memiliki atribut width dan height yang sesuai dimensi gambar asli |
| Nilai Content-Type gambar WebP di tab Network | Content-Type: image/jpeg | Content-Type: image/webp untuk browser yang mendukung, dikonfirmasi di tab Headers DevTools |
| Teks alternatif (alt) pada setiap gambar | Atribut alt kosong atau tidak ada | Setiap <img> memiliki atribut alt berisi deskripsi bermakna tentang isi gambar |
Solusi Masalah di Lapangan (FAQ Teknis)
1. Gambar WebP saya tidak muncul di browser, hanya gambar JPG yang tampil — apakah elemen <picture> tidak berfungsi?
Ini bukan kesalahan. Perilaku ini sebenarnya adalah bukti bahwa elemen <picture> berfungsi dengan benar sebagai mekanisme fallback. Browser yang menampilkan JPG berarti tidak mendukung WebP, sehingga ia melewati elemen <source type="image/webp"> dan menggunakan <img src="...jpg"> sebagai cadangan. Jika Anda menggunakan browser modern seperti Chrome, Firefox, Safari 14+, atau Edge versi terkini dan gambar JPG masih muncul, periksa dua hal: pertama, pastikan nilai atribut type pada elemen <source> ditulis tepat sebagai image/webp (huruf kecil semua, tanpa spasi); kedua, pastikan file foto-produk.webp benar-benar ada di dalam folder images/ dan nama filenya sama persis — termasuk huruf kapital dan ekstensinya. Buka tab Network DevTools dan cari apakah ada permintaan untuk file WebP yang mengembalikan status 404 (tidak ditemukan).
2. Gambar galeri saya langsung dimuat semua sekaligus meskipun sudah menambahkan loading="lazy" — mengapa?
Ada beberapa kemungkinan penyebab. Pertama, periksa apakah gambar galeri tersebut secara teknis memang berada di luar viewport saat halaman pertama dimuat. Jika halaman Anda sangat pendek atau layar monitor Anda sangat besar sehingga semua gambar langsung terlihat tanpa perlu menggulir, browser akan mengunduh semua gambar sekaligus — dan ini perilaku yang benar karena gambar tersebut memang sudah ada di dalam viewport. Coba perkecil jendela browser atau tambahkan konten teks yang cukup banyak di antara foto utama dan galeri untuk mendorong gambar galeri ke posisi yang lebih jauh ke bawah. Kedua, pastikan Anda me-nonaktifkan cache browser di DevTools (centang Disable cache) sebelum muat ulang, karena file yang sudah ada di cache tidak akan muncul sebagai permintaan jaringan baru meskipun lazy loading berfungsi.
3. Apakah saya perlu mengonversi semua gambar PNG ke WebP juga?
Tidak selalu. Keputusan ini bergantung pada fungsi gambar tersebut. Untuk gambar PNG yang digunakan sebagai foto atau ilustrasi kompleks tanpa kebutuhan transparansi, mengonversinya ke WebP lossless atau WebP lossy bisa menghasilkan file yang lebih kecil, dan ini disarankan. Namun untuk gambar PNG sederhana seperti logo dengan area transparan yang hanya berisi beberapa warna solid, perbedaan ukurannya antara PNG dan WebP lossless mungkin tidak signifikan — karena kompresi lossless PNG sudah sangat efisien untuk jenis gambar seperti ini. Fokuskan energi konversi ke WebP pada gambar yang berukuran besar, terutama foto-foto beresolusi tinggi. Gunakan alat seperti Squoosh untuk membandingkan ukuran output WebP vs PNG sebelum memutuskan untuk bermigrasi.
4. Saya tidak tahu harus mengisi nilai width dan height berapa untuk atribut <img> — bagaimana cara mengetahuinya?
Nilai width dan height pada atribut HTML harus mencerminkan dimensi asli gambar dalam satuan piksel — bukan ukuran tampilan di layar. Cara termudah adalah membuka file gambar dengan aplikasi penampil foto atau editor gambar, lalu lihat propertinya untuk mendapatkan lebar dan tinggi dalam piksel. Di Windows, klik kanan file gambar dan pilih Properties > Details. Di macOS, tekan Cmd+I saat file dipilih di Finder. Jika Anda menggunakan CSS max-width: 100%; height: auto; pada elemen img (seperti pada contoh kita), gambar akan otomatis menyesuaikan ukuran tampilan responsif, sementara atribut width dan height berfungsi hanya sebagai petunjuk rasio aspek bagi browser untuk mereservasi ruang sebelum gambar dimuat — mencegah pergeseran tata letak yang mengganggu.
Kesimpulan dan Rencana Aksi
Optimasi gambar di HTML bukan sekadar teknik tingkat lanjut yang hanya relevan bagi developer berpengalaman. Sebaliknya, ini adalah keterampilan fundamental yang memiliki dampak langsung dan terukur pada pengalaman pengguna, kecepatan halaman, dan efisiensi bandwidth. Dengan memahami perbedaan mendasar antara JPG, PNG, dan WebP, Anda kini dapat membuat keputusan format yang tepat untuk setiap jenis gambar: gunakan PNG untuk logo dan elemen antarmuka yang membutuhkan transparansi atau ketajaman mutlak, gunakan JPG sebagai fallback universal, dan prioritaskan WebP melalui elemen <picture> untuk seluruh gambar foto pada browser modern. Penghematan ukuran file yang dihasilkan oleh WebP — yang bisa mencapai 25–35% dibanding JPG dengan kualitas setara — bukan angka abstrak: ini adalah data nyata yang tidak perlu diunduh pengguna Anda di setiap kunjungan.
Atribut loading="lazy" melengkapi strategi ini dengan memastikan bahwa konten visual yang belum dibutuhkan tidak membuang-buang bandwidth dan waktu muat awal. Kombinasi antara format WebP, elemen <picture> dengan fallback JPG, atribut width dan height yang tepat, serta penerapan loading="lazy" yang selektif adalah pola terbaik yang dapat langsung Anda terapkan sekarang juga. Rencana aksi yang disarankan: pertama, audit halaman HTML yang sudah ada dan identifikasi semua elemen <img>; kedua, konversi gambar foto berukuran besar ke format WebP menggunakan Squoosh; ketiga, ganti tag <img> biasa dengan pola <picture><source><img>; keempat, tambahkan loading="lazy" dan decoding="async" hanya pada gambar yang berada di bawah fold; dan kelima, pastikan setiap gambar memiliki atribut alt, width, dan height. Langkah-langkah ini tidak memerlukan alat tambahan, semuanya adalah HTML standar yang siap pakai hari ini.
Ditulis dan diedit oleh Ahmad Ismail Al Malik
