Panduan Lengkap: Kompresi dan Dekompresi File Menggunakan JavaScript (pako.js)
Pada artikel ini, kita akan membahas secara lengkap cara kerja sebuah aplikasi web sederhana yang dapat melakukan kompresi dan dekompresi file langsung dari browser. Aplikasi ini menggunakan JavaScript, pustaka pako.js, serta HTML dasar untuk antarmuka pengguna.
Apa itu pako.js?
pako.js adalah pustaka JavaScript yang mengimplementasikan kompresi data menggunakan algoritma GZIP dan deflate. Pako sangat cepat dan sepenuhnya berjalan di sisi klien, sehingga sangat cocok digunakan untuk aplikasi web seperti ini.
Fitur Aplikasi
Aplikasi ini menyediakan dua fungsi utama:
-
Kompresi File ke Format Biner (Base64)
-
Dekompresi Biner Menjadi File Asli
Selain itu, ada fitur tambahan untuk menyalin hasil kompresi ke clipboard.
Cara Kerja Aplikasi
1. Kompresi File
Ketika pengguna memilih file dan menekan tombol “Compress to Binary”, fungsi compressFile()
akan dijalankan.
Langkah-langkah dalam proses kompresi:
-
File dibaca menggunakan
FileReader
sebagai ArrayBuffer. -
Buffer tersebut dikonversi menjadi
Uint8Array
, lalu dikompresi menggunakanpako.gzip()
. -
Hasil kompresi dan nama asli file dikemas menjadi objek JavaScript.
-
Objek tersebut diubah menjadi string JSON, lalu dikodekan menggunakan base64.
-
Hasil base64 inilah yang dapat disalin dan digunakan di kemudian hari untuk dekompresi.
Data hasil kompresi ditampilkan di dalam textarea
, dan dapat disalin menggunakan tombol “Copy Code”.
2. Dekompresi File
Fungsi decompressFile()
digunakan untuk memulihkan file dari string base64 hasil kompresi.
Langkah-langkah dekompresi:
-
String base64 di-decode menjadi JSON.
-
JSON diubah menjadi objek yang berisi nama file dan data terkompresi.
-
Data terkompresi di-dekompresi menggunakan
pako.ungzip()
. -
Hasilnya adalah data asli file yang dikemas menjadi
Blob
. -
File dapat langsung diunduh menggunakan tag
<a>
yang dibuat secara dinamis, dengan nama file asli yang dipulihkan.
Jika terjadi kesalahan saat parsing atau dekompresi, pengguna akan mendapatkan pesan error.
Penjelasan Kode Tambahan
Copy to Clipboard
Fungsi copyToClipboard()
memanfaatkan API navigator.clipboard
untuk menyalin isi textarea
ke clipboard. Fitur ini memudahkan pengguna untuk menyimpan hasil kompresi ke tempat lain atau membagikannya melalui teks.
Kelebihan Aplikasi Ini
-
Tidak butuh backend: Semua proses kompresi dan dekompresi berjalan di browser.
-
Aman: File tidak diunggah ke server mana pun.
-
Mudah digunakan: Antarmuka sederhana, cukup pilih file, klik tombol, dan salin hasilnya.
-
Mendukung berbagai jenis file: Tidak terbatas pada teks, bisa digunakan untuk gambar, dokumen, atau jenis file lainnya.
Batasan
-
Ukuran file yang sangat besar dapat membuat browser lambat atau bahkan crash.
-
Format base64 memang membuat data sedikit lebih besar (sekitar 33% lebih besar dari aslinya).
-
Kompresi GZIP cocok untuk file teks, tapi mungkin kurang efektif untuk file yang sudah dikompresi seperti gambar JPEG atau video MP4.
Cara Menggunakan
-
Buka halaman HTML ini di browser.
-
Pilih file menggunakan tombol file.
-
Klik Compress to Binary untuk mengompres.
-
Salin data hasil kompresi atau simpan.
-
Untuk mendekompres, tempelkan data base64 di bagian bawah, lalu klik Decompress to File.
-
File akan otomatis terunduh ke komputer Anda.
Penutup
Dengan kombinasi HTML, JavaScript, dan pustaka pako.js, kita dapat membangun aplikasi pengelola file ringan dan praktis tanpa perlu server atau backend. Aplikasi ini cocok untuk siapa saja yang ingin belajar tentang pemrosesan file di browser, kompresi data, dan pemanfaatan JavaScript dalam pengembangan web modern.
Aplikasi ini bisa dikembangkan lebih lanjut dengan fitur seperti:
-
Menyimpan data ke localStorage
-
Menambahkan enkripsi
-
Menyediakan opsi format kompresi lain
Semoga panduan ini membantu kamu memahami cara kerja aplikasi ini dan menginspirasi untuk menciptakan alat-alat serupa.
sangat bermanfaat... sebagai media bembelajaran
BalasHapus