Level Kompilasi Compiler Closure

Dengan Closure Compiler, Anda dapat memilih dari tiga level kompilasi, mulai dari penghapusan spasi kosong dan komentar yang sederhana hingga transformasi kode yang agresif.

MANFAATKAN_HANYA

Level 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 kosong 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 Flag dan Options.

Level kompilasi ini memberikan kompresi paling sedikit dari ketiga level tersebut.

PENGOPTIMALAN_SEDERHANA

Level kompilasi SIMPLE_OPTIMIZATIONS menjalankan spasi kosong dan penghapusan 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 membuat kode menjadi lebih kecil secara signifikan. Karena level SIMPLE_OPTIMIZATIONS hanya mengganti nama simbol yang bersifat lokal untuk fungsi, level ini tidak mengganggu interaksi antara JavaScript yang dikompilasi dan JavaScript lainnya.

Kompilasi dengan SIMPLE_OPTIMIZATIONS selalu mempertahankan fungsi JavaScript yang valid secara sintaksis, dengan ketentuan bahwa kode tidak mengakses variabel lokal menggunakan nama string (misalnya, menggunakan pernyataan eval(), atau dengan memanggil toString pada fungsi).

SIMPLE_OPTIMIZATIONS adalah tingkat kompilasi default.

PENGOPTIMALAN_KEMBALI

Level kompilasi ADVANCED_OPTIMIZATIONS menjalankan transformasi yang sama seperti SIMPLE_OPTIMIZATIONS, tetapi menambahkan berbagai transformasi global yang lebih agresif untuk mencapai kompresi tertinggi dari ketiga level. Level ADVANCED_OPTIMIZATIONS mengompresi JavaScript dengan lebih baik dari 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 Anda mengambil langkah khusus untuk memastikan interoperabilitas. Jika Anda tidak menandai fungsi dan properti eksternal yang dirujuk dalam kode, Closure Compiler akan mengganti nama referensi dengan tidak tepat dalam kode Anda, yang menyebabkan ketidakcocokan antara nama dalam kode Anda dan kode eksternal.

Guna 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, nama fungsi, dan properti global.

  • penghapusan kode mati:

    Kompilasi dengan ADVANCED_OPTIMIZATIONS menghapus kode yang tampaknya tidak dapat dijangkau. Ini sangat berguna khususnya jika dikombinasikan dengan library besar. Jika Anda hanya menggunakan beberapa fungsi dari file library besar, compiler dapat menghapus semuanya kecuali fungsi tersebut dari output-nya.

  • penyisipan global:

    Kompilasi dengan ADVANCED_OPTIMIZATIONS menggantikan beberapa panggilan fungsi dengan isi fungsi. Transformasi ini dikenal sebagai "penyelarasan". Compiler hanya inline fungsi jika menentukan bahwa inline aman dan menghemat ruang. Kompilasi dengan ADVANCED_OPTIMIZATIONS juga inline konstanta dan beberapa variabel saat compiler menentukan bahwa konstantanya dapat dilakukan dengan aman.

Cara Menetapkan Level Kompilasi

UI layanan Closure Compiler, API layanan, dan aplikasi memiliki metode yang berbeda untuk menyetel compilation_level.

Di UI layanan Closure Compiler

Untuk menetapkan tingkat kompilasi di UI layanan Closure Compiler, klik tombol pilihan di bagian Pengoptimalan pada antarmuka.

Screenshot UI

Di Closure Compiler service API

Untuk menetapkan level kompilasi di Closure Compiler service API, sertakan parameter permintaan bernama compilation_level dengan nilai WHITESPACE_ONLY, SIMPLE_OPTIMIZATIONS, atau ADVANCED_OPTIMIZATIONS, seperti dalam program python berikut:

#!/usr/bin/python2.4

import httplib, urllib, sys

params = urllib.urlencode([
    ('code_url', sys.argv[1]),
    ('compilation_level', 'ADVANCED_OPTIMIZATIONS'),
    ('output_format', 'text'),
    ('output_info', 'compiled_code'),
  ])

headers = { "Content-type": "application/x-www-form-urlencoded" }
conn = httplib.HTTPSConnection('closure-compiler.appspot.com')
conn.request('POST', '/compile', params, headers)
response = conn.getresponse()
data = response.read()
print data
conn.close()

Di aplikasi Closure Compiler

Untuk menetapkan level kompilasi dalam aplikasi Closure Compiler, sertakan flag command line --compilation_level dengan nilai WHITESPACE_ONLY, SIMPLE, atau ADVANCED, seperti dalam perintah berikut:

java -jar compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS --js hello.js