JavaScript Code Compressor
JavaScript code compressor sudah banyak kita jumpai, mulai dari yang gratis sampai yang berbayar, dari yang dicompress secara online maupun software yang ditanam di komputer kita. Terdapat dua macam JavaScript code compressor yaitu: (1) bekerja dengan hanya menghilangkan komentar dan whitespace; (2) selain menghilangkan komentar dan whitespace juga menyingkat semua nama variabel dan fungsi menjadi beberapa karakter yang lebih pendak.
Dalam tulisan kali ini, saya hanya akan membahas code compressor yang pertama. Sepintas untuk menghilangkan whitespace dan komentar tampak mudah. Whitespace dapat dihilangkan dengan menghilangkan spasi di depan dan akhir kode. Komentar dapat dikenali dengan karakter pembukan dan penutup pada komentar multibaris atau pembuka komentar pada komentar baristunggal. Permasalahan timbul jika terdapat karakter pembuka komentar yang terdapat pada string, misalhnya string "http://friendster.com/". String tersebut mengandung karakkter komentar, jika tidak hati hati karakter di belakang // akan ikut dihilangkan. Permasalahan tidak hanya terjadi pada string namun juga pada regular expression. Keduanya dapat berisi semua bentuk string termasuk penanda komentar.
Untuk mengatasi permasalahan ini, semua string dan regular expression harus diselamatkan dari pembersihan. Untuk itu sebelum dilakukan pembersihan, simpan dulu semua string dan regular expression ke dalam array/collection yang pada akhir pembersihan string dan regular expression tersebut dikembalikan dengan bentuk seperti semula. Pada contoh sebelumnya, string dapat diganti menjadi sebuah tanda yang unik seperti "_____STRINGREGEX_n_STRINGREGEX____", dengan n adalah nomor urut string yang ditemukan. Metode ini yang saya terapkan pada code compressor [li][url=http://www.dotnetblogengine.net/]di sini[/url][/li].
Penyimpanan string dapat dilakukan dengan mencari pattern string dan regular expression menggunakan regular expression. Jika ada pattern yang cocok, hasilnya dimasukkan dalam collection. Kode dapat dilihat pada contoh berikut. (Pada contoh script disimpan dalam variable [b]body[/b]).
<">Pada contoh di atas, regular expression akan mencari semua pattern untuk string dan regular expression. String dalam JavaScript dapat berupa karakter yang berada di dalam tanda kutip tunggal maupun kutip ganda. Oleh karena itu pada regular expression harus mengecek keduanya. Setelah pattern ditemukan, hasilnya disimpan dalam collection dan ganti pattern string/regular expression dengan tanda yang unik.
Setalah kode bersih dari string dan regular expression, selanjutnya kita dengan mudah dapat membersihkan whitespace dan komentar yang ada dengan regular expression juga seperti pada kode berikut.
<">Setelah kode bersih dari whitespace dan komentar, kembalikan lagi string dan regular expression yang telah disimpan sebelumnya dengan mengganti tanda unik dengan string yang disimpan dalam collection.
<">Dengan kompresi tersebut, kode JavaScript akan menjadi lebih kecil karena semua whitespace dan komentar telah dibersihkan. Baris kode secara lengkap dapat dilihat pada kode berikut.
<">Yang perlu diingat dari kompresi javascript ini adalah, kita harus menambahkan tanda titik koma (
pada setiap pernyataan JavaScript. Kode berikut akan dieksekusi dengan benar oleh broser jika pada kondisi tanpa terkompress, namun akan terjadi error setelah dilakukan kompresi.
<">Baris 5, 9, dan 12 merupakan kode yang benar dalam JavaScript tapi ketika kode tersebut dikompres, akan menimbulkan kesalahan karena akan menyatu dengan baris berikutnya, seperti terlihat pada kode berikut.
<">Kode diatas sengaja dipotong karena akan terlalu panjang jika ditulis semua. Dari kode tersebut akan terjadi kesalahan karena antara array dan fungsi tidak ada pemisah, deklarasi variable content menjadi error karena nilainya kacau (pernyataan if ikut ke dalam nilai content karena tanpa pemisah). Dan kode lainnya yang tidak mengguakan akhiran titik koma menjadi error.