Mengapa memproses gambar di browser adalah kemenangan bagi privasi
Bagaimana API web modern memungkinkan Anda membangun alat gambar yang benar-benar privat — dan apa artinya bagi orang yang menggunakannya.
Daftar isi
- Ekspektasi bawaan itu keliru
- Apa arti "client-side" sebenarnya
- Mengapa ini penting dalam praktik
- Di mana komprominya masih ada
- Cold start lebih berat
- Perangkat keras pengguna menetapkan batas atas
- Anda tidak dapat melakukan batch lintas pengguna
- Beberapa operasi membutuhkan server
- Sebuah poin etis kecil
- Ke mana setelah ini
Ekspektasi bawaan itu keliru
Selama sebagian besar dua puluh tahun terakhir, melakukan apa pun yang tidak sepele dengan gambar di web berarti mengunggahnya ke server. Mengonversi foto HEIC, menghapus metadata EXIF, membuat favicon — semua alat itu secara historis berada di balik form multipart. Pengguna mengklik upload, file berjalan melintasi internet publik, dan server di suatu tempat mengerjakan prosesnya.
Bawaan seperti itu tidak lagi diperlukan secara teknis. Browser telah menghadirkan API bertahun-tahun lalu yang membuat seluruh pipeline berjalan secara lokal:
<canvas>andOffscreenCanvasuntuk pekerjaan tingkat pikselcreateImageBitmap()untuk decoding cepat di luar thread utamaFileandBlobuntuk membaca unggahan tanpa mengirimnya ke mana pun- WebAssembly untuk library seperti libheif, libwebp dan ffmpeg
- Web Workers untuk menjaga UI tetap responsif saat pekerjaan berat berjalan
Jika Anda merangkainya, file tidak pernah meninggalkan perangkat. Server tidak pernah melihatnya. Tidak ada yang dicatat, tidak ada yang bocor, tidak ada yang bisa diminta paksa melalui surat perintah pengadilan.
Apa arti "client-side" sebenarnya
Perlu tepat dalam hal ini, karena teks pemasaran pada banyak alat "privat" sering longgar.
Sebuah alat benar-benar client-side ketika, setelah halaman dimuat, tidak ada bagian dari isi file yang pernah berjalan ke server. Halaman itu sendiri dimuat dari server (HTML, JavaScript, mungkin modul WebAssembly). Setelah itu, file Anda masuk ke memori browser dan tetap di sana sampai Anda menutup tab.
Sebuah alat bukan client-side jika ia:
- Melakukan POST file ke endpoint
/api/... - Mengirim thumbnail atau pratinjau ke server
- Memanggil endpoint analitik dengan metadata file (dimensi, nama, hash)
- Merutekan file melalui CDN pihak ketiga yang mengembalikan URL hasil pemrosesan
Panel jaringan di devtools browser Anda adalah penutur kebenaran. Buka, jatuhkan file, dan periksa apa yang diunggah. Jika Anda melihat nama file atau ukuran file Anda melesat keluar, alat itu tidak seprivat klaimnya.
Mengapa ini penting dalam praktik
Tiga kelompok orang mendapat manfaat secara diam-diam ketika pemrosesan gambar berpindah ke browser.
Jurnalis, aktivis, dan peneliti menangani materi sumber yang akan berbahaya jika bocor. Metadata EXIF dapat mencakup koordinat GPS dari perangkat yang mengambil foto. Penghapus EXIF di sisi browser berarti file asli tidak pernah melintasi jaringan.
Perusahaan di bawah regulasi — layanan kesehatan, keuangan, hukum — jika tidak demikian akan memerlukan perjanjian pemrosesan data dengan siapa pun yang menjalankan alat tersebut. Halaman statis yang mengerjakan prosesnya secara lokal tidak memiliki DPA untuk ditandatangani karena tidak ada pemroses.
Semua orang lainnya mendapat manfaat yang jelas: proses lebih cepat (tanpa waktu unggah), tidak ada batas ukuran file yang ditentukan oleh tagihan hosting, tidak gagal saat server sedang down.
Di mana komprominya masih ada
Client-side bukan sihir. Ada biaya nyata yang perlu Anda pikirkan sebelum memilihnya untuk masalah tertentu.
Cold start lebih berat
Bundle WebAssembly untuk decoding HEIC berukuran beberapa ratus kilobyte. ffmpeg yang dikompilasi ke WASM berukuran beberapa megabyte. Kunjungan pertama membayar biaya itu. Caching membantu, dan code-splitting lebih membantu lagi — hanya muat codec yang benar-benar dipilih pengguna.
Perangkat keras pengguna menetapkan batas atas
File RAW 200 megapiksel akan kehabisan memori di ponsel murah jauh sebelum kehabisan memori di server. Jujurlah di UI tentang apa yang realistis pada perangkat tersebut.
Anda tidak dapat melakukan batch lintas pengguna
Pemrosesan server-side dapat melakukan deduplikasi dan amortisasi. Jika satu juta pengguna mengonversi gambar stok yang sama, server dapat memprosesnya sekali. Client-side melakukannya satu juta kali. Untuk sebagian besar beban kerja alat personal, ini tidak masalah — pekerjaannya memang unik — tetapi hal ini layak diketahui.
Beberapa operasi membutuhkan server
Pencarian gambar terbalik membutuhkan indeks. Moderasi konten membutuhkan model yang terlalu besar untuk dikirimkan. Apa pun yang membandingkan file Anda dengan korpus yang tidak Anda miliki membutuhkan backend.
Sebuah poin etis kecil
Jika alat Anda benar-benar client-side, katakan dengan jelas dan buktikan. Tautkan ke source, tunjukkan panel jaringan, jelaskan apa yang berjalan di mana. Frasa seperti "kami tidak menyimpan data Anda" tidak berarti apa-apa tanpa arsitektur yang mendukungnya — setiap alat server-side yang pernah membocorkan data pelanggan juga mengatakan hal yang persis sama, dan sungguh-sungguh memaksudkannya pada saat itu.
Kebalikannya juga berlaku. Jika alat Anda memang server-side, jangan berpura-pura sebaliknya. Pengguna sudah mulai mengenali pola ini, dan pukulan terhadap kepercayaan saat mereka menangkap Anda bersifat permanen.
<!-- tool-cta:start -->
💡 Coba ini: Lihat pemrosesan sisi klien beraksi dengan Image Compressor, yang mengecilkan gambar sepenuhnya di browser Anda sehingga tidak ada apa pun yang pernah diunggah ke server.
<!-- tool-cta:end -->
Ke mana setelah ini
Jika Anda membangun utilitas gambar kecil hari ini, jadikan client-side sebagai default dan gunakan server hanya ketika Anda memiliki alasan konkret. Browser akan mengejutkan Anda dengan sejauh mana ia dapat memikul pekerjaan itu — dan orang-orang di ujung lain koneksi jaringan akan diam-diam berterima kasih atas byte yang tidak pernah meninggalkan mesin mereka.


