Cara kerja konversi gambar di browser (dan kenapa saya membangunnya begitu)
Dov Azencot
@DovAzencotAlasan seluruh situs ini ada adalah satu momen gelisah kecil dan konyol yang saya alami bertahun-tahun lalu. Saya perlu mengonversi satu foto HEIC ke JPG, saya ketik hal yang paling jelas ke bilah pencarian, dan saya mendarat di konverter yang meminta saya mengunggah gambar ke server mereka. Jadi saya lakukan. Berhasil. Lalu saya duduk berpikir: foto itu kini bersemayam di suatu mesin yang tak saya ketahui sedikit pun, dijalankan orang yang takkan pernah saya temui, disimpan selama waktu yang tak pernah diberitahukan kepada saya. Untuk tangkapan layar acak, tak apa. Tapi ini bukan tangkapan layar. Ini foto pribadi, dan saya baru saja menyerahkannya ke orang asing demi menghemat tiga puluh detik.
Itulah masalah yang saya bertekad tak lagi memilikinya. Ternyata jawabannya, unggahan itu sejak awal memang tak pernah diperlukan.
Cara lama: menyewa komputer orang asing
Konverter daring tradisional bekerja seperti jasa pesan-antar. Anda mengirim file Anda ke sebuah server. Server menjalankan konversi memakai perangkat lunak yang terpasang di mesin miliknya. Ia mengirim hasilnya kembali ke bawah. Gambar Anda melakukan perjalanan pulang-pergi melalui perangkat keras yang tak Anda kendalikan, dan di suatu tempat di tengahnya ia bersemayam, utuh, di disk yang bukan milik Anda.
Tiap janji privasi yang dipasangkan pada model itu adalah janji tentang perilaku — filenya dihapus setelah satu jam, tak ada yang melihat. Mungkin itu ditepati. Mungkin memang. Anda tak punya cara memeriksanya, dan Anda mempercayakan byte sesungguhnya dari file Anda kepadanya. Kepercayaan itulah seluruh arsitekturnya, dan kepercayaan justru hal yang tak ingin saya keluarkan.
Cara baru: browser Anda sudah punya komputernya
Inilah yang berubah. Browser modern bisa menjalankan program nyata yang terkompilasi pada kecepatan nyaris-native, lewat sesuatu bernama WebAssembly — WASM singkatnya. Codec gambar yang dulu bersemayam di server — kode yang membaca PNG, yang mengenkode WebP, yang mendekode HEIC — bisa dikompilasi ke WASM dan berjalan di dalam tab browser yang sudah Anda buka.
Jadi saat Anda menjatuhkan file ke halaman yang dibangun dengan cara ini, perangkat lunak konversi terunduh ke mesin Anda, sekali, seperti bagian lain mana pun dari halaman web. Sejak saat itu pekerjaan sesungguhnya — membaca gambar Anda, mentranskodenya, menulis file baru — terjadi di prosesor Anda sendiri, di memori Anda sendiri. Hasilnya diserahkan langsung kembali kepada Anda sebagai unduhan. File Anda tak pernah dikirim ke mana pun, karena tak ada tempat untuk mengirimnya. Tak ada server sama sekali dalam lingkarannya.
Itulah kenapa saya bisa bilang file Anda tak pernah meninggalkan perangkat dan memaksudkannya sebagai fakta ketimbang kebijakan. Bukan karena saya berjanji tak melihat. Melainkan karena tak ada jalur yang membuat gambar Anda sampai kepada saya. Saya tak bisa mengambil foto Anda seandainya pengadilan memerintahkannya, karena ia tak pernah ada di sisi kabel saya. Privasi bukan fitur yang saya tambahkan di atas. Ia konsekuensi dari tempat kode berjalan.
Bagaimana Anda bisa memastikannya benar
Anda tak harus percaya begitu saja pada kata saya, dan itu bagian yang paling saya suka. Buka developer tools di browser Anda, amati tab jaringan, dan konversikan sebuah file. Anda akan melihat halaman dan codec WASM terunduh sekali. Anda takkan melihat gambar Anda naik. Lebih baik lagi: muat halamannya, matikan Wi-Fi Anda, dan tetap konversikan sesuatu. Ia masih berhasil, karena segala yang ia butuhkan sudah ada di mesin Anda. Alat yang mengunggah file Anda tak bisa melakukan itu. Yang ini bisa.
Satu batas nyata itu
Saya berjanji jujur, jadi ini dia. Menjalankan konversi di perangkat Anda sendiri berarti ia memakai memori Anda sendiri, dan sebuah tab browser tak mendapat memori tak terbatas untuk dimainkan.
Untuk file normal — foto, tangkapan layar, logo, hal yang orang konversi sepanjang hari — ini bukan soal. Tapi kalau Anda melempar sesuatu yang benar-benar raksasa ke sana, satu gambar pada resolusi ekstrem, atau batch besar sekaligus, Anda bisa menabrak langit-langitnya. Mendekode gambar berarti menahan piksel tak terkompresi-nya di memori, yang jauh lebih besar dari file di disk, dan gambar raksasa bisa menghabiskan apa yang diizinkan untuk tab itu. Saat itu terjadi, konversinya melambat sampai merangkak atau tabnya menyerah.
Server dengan RAM 64 GB tak pernah punya masalah itu. Jadi inilah pertukarannya, dinyatakan terus terang: konverter sisi-server bisa melahap file yang lebih besar dari yang sanggup ditangani perangkat Anda. Pendekatan ini tak bisa. Yang ia berikan sebagai gantinya adalah file Anda tak pernah meninggalkan tangan Anda. Untuk sebagian besar dari apa yang orang benar-benar konversi, itu pertukaran yang layak diambil tanpa berpikir dua kali. Untuk satu file monster yang langka, itu batas nyata, dan saya lebih memilih memberi tahu Anda ketimbang berpura-pura ia tak ada.
Kenapa saya tetap yakin ini bawaan yang tepat
Sebagian besar konversi adalah file biasa yang sejak awal tak pernah perlu menyentuh server. Unggahan itu selalu sisa dari era saat browser belum bisa mengerjakan tugas ini sendiri. Sekarang mereka bisa. Jadi bawaan yang waras berbalik: simpan file di mesin Anda, kerjakan pekerjaannya secara lokal, dan baru raih server pada kesempatan langka saat perangkat keras Anda sendiri benar-benar tak sanggup.
Itulah seluruh gagasan di balik semua yang ada di sini. Ini situs yang sama yang saya bangun untuk diri sendiri setelah satu sore yang gelisah itu, supaya saya tak pernah lagi harus menyerahkan foto pribadi ke orang asing cuma untuk mengganti ekstensi filenya. Ternyata saya tak pernah perlu. Anda pun tidak.
Artikel terkait
Kenapa saya mengonversi PNG ke WebP (dan kapan sama sekali tidak)
PNG hebat saat dikerjakan, boros saat dipublikasikan. Kita bedah apa yang benar-benar dihemat WebP, di mana ia tak berguna, dan satu aturan yang tak saya langgar.
PNG atau JPG? Aturan sepuluh tahun yang saya pakai untuk memutuskan
Lossless lawan lossy, tepi lawan foto, transparansi lawan tanpa transparansi. Satu pertanyaan sederhana memberi tahu format sebuah file — dengan tabel ukuran nyata sebagai bukti.
Kenapa foto iPhone Anda berformat HEIC (dan kapan cukup jadikan JPG)
HEIC memang format yang lebih baik, tapi separuh web masih tak bisa membukanya. Ini alasan Apple memilihnya, apa yang benar-benar Anda korbankan saat konversi ke JPG, dan kapan saya tak repot.
Semua artikel