Histori singkat gambar di web

Terlepas dari seberapa jauh Anda mempelajari cara mendesain dan mengembangkan untuk web, elemen <img> hanya memerlukan sedikit pengenalan. Diluncurkan di Netscape (“Mosaic”, saat itu) pada tahun 1993 dan ditambahkan ke spesifikasi HTML pada tahun 1995, <img> telah lama memainkan peran yang sederhana namun kuat di dalam platform web. Developer menambahkan file gambar "sumber" dengan atribut src dan memberikan alternatif teks dengan atribut alt jika gambar tidak dapat dirender atau teknologi pendukung meminta alternatif. Setelah itu, browser hanya memiliki satu tugas: mendapatkan data gambar, lalu merendernya secepat mungkin.

Dalam sebagian besar riwayat pengembangan web, bekerja dengan gambar tidak menjadi lebih rumit dari itu. Selain itu, meskipun web modern sangat kompleks, dasar-dasar penggunaan gambar tidak berubah: gunakan format gambar yang mobile-friendly untuk kompatibilitas, kompresi yang logis guna menghemat bandwidth, dan dimensi yang sesuai dengan ruang yang akan ditempati gambar dalam tata letak halaman.

Menggunakan tata letak dengan lebar tetap, seperti yang kami lakukan pada saat kami merasa lebih berpendapat tentang pengalaman pengguna terhadap web, membuat proses ini menjadi proses yang tidak rumit. Sangat mudah untuk menyetel ukuran sumber gambar. Untuk gambar yang menempati ruang dengan lebar lima ratus piksel dan tinggi tiga ratus piksel, ini adalah kasus penentuan gambar sumber dengan ukuran yang sama.

Gambar dalam tata letak responsif

Di samping tata letak yang fleksibel dan penggunaan kueri media CSS, "gambar dan media yang fleksibel" adalah salah satu dari tiga faset yang menentukan desain web responsif. Agar gambar fleksibel, developer mulai menggunakan CSS untuk menyetel max-width: 100% pada gambar (atau semua gambar, di seluruh situs) untuk memberi tahu mesin rendering browser agar gambar tidak melebihi penampung induknya dengan memperkecil gambar. Secara visual, cara ini berfungsi dengan sempurna–menskalakan gambar raster secara visual berjalan lancar. Dengan satu atau dua baris CSS, gambar yang diperkecil akan selalu terlihat seolah-olah kita telah menentukan sumber gambar yang dimaksudkan untuk ditampilkan dengan ukuran tersebut. Saat mesin rendering diberi data gambar lebih banyak dari yang diperlukan untuk ruang yang ditempati gambar dalam tata letak, mesin rendering dapat membuat keputusan yang tepat tentang cara merender gambar yang dikurangi, dan dapat melakukannya tanpa menyebabkan artefak visual atau pemburaman.

Biasanya Anda tidak ingin meningkatkan gambar—yaitu, merender <img> pada ukuran yang lebih besar dari ukuran intrinsik gambar sumber. Gambar yang ditampilkan akan tampak buram dan terlihat berbintik.

Menggunakan img { max-width: 100% } berarti saat ukuran container fleksibel berubah, gambar akan diperkecil sesuai kebutuhan. Tidak seperti menyetel width: 100% yang lebih kaku, tindakan ini juga memastikan gambar tidak akan ditingkatkan skalanya melebihi ukuran intrinsiknya. Sejak lama, itulah aturan dalam menggunakan gambar: gunakan format yang dipahami browser, gunakan tingkat kompresi yang wajar, dan jangan pernah menaikkan skala gambar.

Namun, meskipun pendekatannya sederhana dan efektif secara visual, hal ini membutuhkan biaya performa yang sangat besar. Karena <img> hanya mendukung satu sumber untuk data gambar, pendekatan ini mengharuskan kami menyediakan aset gambar dengan ukuran intrinsik sebesar ukuran terbesar yang dapat ditampilkan. Gambar yang dimaksudkan untuk menempati ruang dalam tata letak yang dapat berkisar dari 300px hingga lebar 2000px, bergantung pada ukuran area tampilan pengguna, memerlukan sumber gambar dengan lebar intrinsik minimal 2000px. Bagi pengguna yang hanya melihat halaman melalui area pandang kecil, semuanya akan terlihat seperti yang diharapkan—gambar akan diskalakan dengan baik. Pada halaman yang dirender, gambar sumber yang berukuran besar tetapi diperkecil akan terlihat sama seperti gambar yang berukuran sesuai. Namun, mereka tetap akan mentransfer dan merender gambar lebar 2000px, menghabiskan bandwidth dan daya pemrosesan yang sangat besar tanpa manfaat nyata.

Semuanya menjadi jauh lebih buruk dengan hadirnya perangkat "Retina" pertama, karena kepadatan tampilan menjadi kekhawatiran terkait ukuran area pandang. Sumber gambar memerlukan lebar intrinsik yang jauh lebih besar agar sesuai dengan tampilan kepadatan tinggi. Secara sederhana, tampilan dengan kepadatan dua kali lipat memerlukan piksel gambar dua kali lebih banyak untuk merender gambar setajam mungkin.

Di sini, developer kembali dapat mengandalkan kemampuan mesin rendering untuk memperkecil gambar secara visual. Dengan memberi browser gambar sumber lebar 800px di src, lalu menentukan bahwa gambar tersebut harus ditampilkan pada lebar 400px bersama CSS, hasilnya adalah gambar yang dirender dengan kepadatan piksel dua kali lipat:

Gambar sumber tunggal, yang dipotong agar sesuai dengan ruang terbesar di tata letak dan layar berkepadatan tinggi, tentu saja berfungsi untuk semua pengguna secara visual. Sumber gambar besar beresolusi tinggi yang dirender pada layar kecil dengan kepadatan rendah akan terlihat seperti gambar kecil berkepadatan rendah lainnya, tetapi terasa jauh lebih lambat. Pengguna akan dibiarkan menanggung semua biaya kinerja sumber gambar besar selebar 4.000 px tersebut, tanpa manfaat apa pun.

Untuk waktu yang lama, <img> melakukan banyak hal, yaitu "mengambil data gambar dan menampilkannya di layar". Memang cukup baik, tetapi <img> tidak dapat mengakomodasi perubahan radikal dalam konteks penjelajahan yang kita alami. Meskipun desain web responsif menjadi praktik pengembangan umum, browser mengoptimalkan performa img selama hampir dua puluh tahun—tetapi untuk semua pengguna kecuali pengguna yang paling memiliki hak istimewa, konten gambar halaman tidak efisien sejak awal. Tidak peduli seberapa cepat browser berhasil meminta, mengurai, dan merender sumber gambar, aset tersebut mungkin akan jauh lebih besar daripada yang dibutuhkan pengguna.