Closure Compiler memungkinkan Anda memilih dari tiga tingkat kompilasi, mulai dari penghapusan sederhana spasi dan komentar hingga transformasi kode yang agresif.
WHITESPACE_ONLY
Tingkat kompilasi WHITESPACE_ONLY
menghapus komentar
dari kode Anda dan juga menghapus jeda baris, spasi yang tidak perlu,
tanda baca yang tidak relevan (seperti tanda kurung dan titik koma), dan
spasi putih lainnya. JavaScript output secara fungsional identik dengan JavaScript sumber.
Transpilasi fitur bahasa akan tetap terjadi jika mode bahasa output yang diminta berbeda dengan mode bahasa input.
Lihat --language_in
dan --language_out
di
Tanda dan Opsi.
Tingkat kompilasi ini memberikan kompresi paling sedikit dari ketiga tingkat.
SIMPLE_OPTIMIZATIONS
Tingkat kompilasi SIMPLE_OPTIMIZATIONS
melakukan
penghapusan spasi kosong dan komentar yang sama
seperti WHITESPACE_ONLY
, tetapi juga melakukan pengoptimalan
dalam ekspresi dan fungsi, termasuk mengganti nama variabel
lokal dan parameter fungsi menjadi nama yang lebih pendek. Mengganti nama
variabel menjadi nama yang lebih pendek akan membuat kode menjadi jauh
lebih kecil. Karena tingkat SIMPLE_OPTIMIZATIONS
hanya mengganti nama simbol yang bersifat lokal untuk fungsi, tingkat ini tidak
mengganggu interaksi antara JavaScript yang dikompilasi dan
JavaScript lainnya.
Kompilasi dengan SIMPLE_OPTIMIZATIONS
selalu mempertahankan
fungsi JavaScript yang valid secara sintaksis, asalkan
kode tidak mengakses variabel lokal menggunakan nama string (dengan
menggunakan pernyataan eval()
, misalnya, atau dengan memanggil
toString pada fungsi).
SIMPLE_OPTIMIZATIONS
adalah tingkat kompilasi default.
ADVANCED_OPTIMIZATIONS
Tingkat kompilasi ADVANCED_OPTIMIZATIONS
melakukan transformasi yang sama seperti SIMPLE_OPTIMIZATIONS
, tetapi menambahkan berbagai transformasi global yang lebih agresif untuk mencapai kompresi tertinggi dari ketiga tingkat tersebut. Level ADVANCED_OPTIMIZATIONS
mengompresi
JavaScript jauh melampaui yang dapat dilakukan dengan alat lain.
Untuk mengaktifkan kompresi ekstrem ini, ADVANCED_OPTIMIZATIONS
membuat asumsi yang kuat tentang kode yang dikompilasi. Jika kode Anda tidak sesuai dengan asumsi tersebut, ADVANCED_OPTIMIZATIONS
akan menghasilkan kode yang tidak berjalan.
Misalnya, kode yang dikompilasi dengan ADVANCED_OPTIMIZATIONS
mungkin tidak berfungsi dengan kode yang tidak dikompilasi kecuali jika Anda melakukan langkah-langkah khusus untuk memastikan interoperabilitas. Jika Anda tidak menandai fungsi dan
properti eksternal yang dirujuk dalam kode, Closure Compiler akan
mengganti nama referensi dalam kode Anda secara tidak tepat, sehingga menyebabkan ketidakcocokan
antara nama dalam kode Anda dan dalam kode eksternal.
Untuk mempelajari lebih lanjut cara menyiapkan kode
untuk ADVANCED_OPTIMIZATIONS
,
baca Kompilasi Lanjutan dan
Eksternal.
Transformasi ADVANCED_OPTIMIZATIONS
mencakup:
- penggantian nama yang lebih agresif:
Kompilasi dengan
SIMPLE_OPTIMIZATIONS
hanya mengganti nama parameter dan variabel dalam fungsi.ADVANCED_OPTIMIZATIONS
juga mengganti nama variabel global, nama fungsi, dan properti. - penghapusan kode tidak terpakai:
Kompilasi dengan
ADVANCED_OPTIMIZATIONS
menghapus kode yang terbukti tidak dapat dijangkau. Hal ini sangat berguna jika dikombinasikan dengan library besar. Jika Anda hanya menggunakan beberapa fungsi dari file library besar, compiler dapat menghapus semua fungsi kecuali fungsi tersebut dari outputnya. - penyisipan inline global:
Kompilasi dengan
ADVANCED_OPTIMIZATIONS
menggantikan beberapa panggilan fungsi dengan isi fungsi. Transformasi ini dikenal sebagai "inline". Compiler hanya menyisipkan fungsi jika compiler menentukan bahwa penyisipan aman dan menghemat ruang. Kompilasi denganADVANCED_OPTIMIZATIONS
juga menyisipkan konstanta dan beberapa variabel saat compiler menentukan bahwa hal itu dapat dilakukan dengan aman.
Cara Menetapkan Tingkat Kompilasi
Untuk menetapkan tingkat kompilasi di aplikasi Closure Compiler,
sertakan flag command line --compilation_level
dengan
nilai
WHITESPACE_ONLY
, SIMPLE
,
atau ADVANCED
, seperti pada perintah berikut:
java -jar compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS --js hello.js