Closure Compiler Derleme Seviyeleri

Closure Compiler, boşluk ve yorumların basitçe kaldırılmasından agresif kod dönüşümlerine kadar derleme için üç seviye arasından seçim yapmanıza olanak tanır.

WHITESPACE_ONLY

WHITESPACE_ONLY derleme düzeyi, kodunuzdaki yorumları, satır sonlarını, gereksiz boşlukları, parantez ve noktalı virgül gibi gereksiz noktalama işaretlerini ve diğer boşlukları kaldırır. Çıkış JavaScript'i, kaynak JavaScript ile işlevsel olarak aynıdır.

İstenen çıkış dili modu, giriş dili modundan farklıysa dil özelliklerinin derlenmesi yine de gerçekleşir. İşaretler ve Seçenekler bölümünde --language_in ve --language_out simgelerine bakın.

Bu derleme düzeyi, üç düzey arasında en az sıkıştırma sağlayan düzeydir.

SIMPLE_OPTIMIZATIONS

SIMPLE_OPTIMIZATIONS derleme düzeyi, WHITESPACE_ONLY ile aynı boşluk ve yorum kaldırma işlemlerini gerçekleştirir. Ancak yerel değişkenleri ve işlev parametrelerini daha kısa adlarla yeniden adlandırma da dahil olmak üzere ifadeler ve işlevler içinde optimizasyonlar da yapar. Değişkenleri daha kısa adlarla yeniden adlandırmak kodu önemli ölçüde küçültür. SIMPLE_OPTIMIZATIONS düzeyi yalnızca işlevlere özgü sembolleri yeniden adlandırdığı için derlenmiş JavaScript ile diğer JavaScript arasındaki etkileşime müdahale etmez.

SIMPLE_OPTIMIZATIONS ile derleme, kodun dize adlarını kullanarak yerel değişkenlere erişmemesi (örneğin, eval() ifadelerini kullanarak veya işlevlerde toString'i çağırarak) koşuluyla, söz dizimi açısından geçerli JavaScript'in işlevselliğini her zaman korur.

SIMPLE_OPTIMIZATIONS, varsayılan derleme düzeyidir.

ADVANCED_OPTIMIZATIONS

ADVANCED_OPTIMIZATIONS derleme düzeyi, SIMPLE_OPTIMIZATIONS ile aynı dönüşümleri gerçekleştirir ancak üç düzeyin en yüksek sıkıştırmasını elde etmek için çeşitli daha agresif global dönüşümler ekler. ADVANCED_OPTIMIZATIONS seviyesi, JavaScript'i diğer araçlarla mümkün olandan çok daha iyi şekilde sıkıştırır.

Bu aşırı sıkıştırmayı etkinleştirmek için ADVANCED_OPTIMIZATIONS, derlenmiş kodla ilgili güçlü varsayımlarda bulunur. Kodunuz bu varsayımlara uymuyorsa ADVANCED_OPTIMIZATIONS çalışmayan bir kod oluşturur.

Örneğin, ADVANCED_OPTIMIZATIONS ile derlenen kod, birlikte çalışabilirliği sağlamak için özel adımlar atmadığınız sürece derlenmemiş kodla çalışmayabilir. Kodunuzda referans verilen harici işlevleri ve özellikleri işaretlemezseniz Closure Compiler, kodunuzdaki referansları uygunsuz şekilde yeniden adlandırır. Bu durum, kodunuzdaki adlar ile harici koddaki adlar arasında uyuşmazlıklara neden olur.

Kodunuzu ADVANCED_OPTIMIZATIONS için hazırlama hakkında daha fazla bilgi edinmek istiyorsanız Advanced Compilation and Externs (Gelişmiş Derleme ve Harici Dosyalar) başlıklı makaleyi inceleyin.

ADVANCED_OPTIMIZATIONS dönüşümleri şunlardır:

  • daha agresif yeniden adlandırma:

    SIMPLE_OPTIMIZATIONS ile derleme yalnızca işlevlerdeki parametreleri ve değişkenleri yeniden adlandırır. ADVANCED_OPTIMIZATIONS ayrıca global değişkenleri, işlev adlarını ve özellikleri de yeniden adlandırır.

  • Ölü kod kaldırma:

    ADVANCED_OPTIMIZATIONS ile derleme, kesin olarak ulaşılamayan kodu kaldırır. Bu özellik, özellikle büyük kitaplıklarla birlikte kullanıldığında faydalıdır. Büyük bir kitaplık dosyasından yalnızca birkaç işlev kullanıyorsanız derleyici, bu işlevler dışındaki her şeyi çıkışından kaldırabilir.

  • global inlining:

    ADVANCED_OPTIMIZATIONS ile derleme, bazı işlev çağrılarını işlevin gövdesiyle değiştirir. Bu dönüşüm "satır içi" olarak bilinir. Derleyici, yalnızca satır içi işlemin güvenli olduğunu ve yer tasarrufu sağladığını belirlediğinde işlevleri satır içine yerleştirir. Derleyici, güvenli bir şekilde yapabileceğini belirlediğinde ADVANCED_OPTIMIZATIONS ile derleme, sabitleri ve bazı değişkenleri de satır içi yapar.

Derleme düzeyini ayarlama

Closure Compiler uygulamasında derleme düzeyini ayarlamak için aşağıdaki komutta olduğu gibi --compilation_level komut satırı işaretini WHITESPACE_ONLY, SIMPLE veya ADVANCED değeriyle birlikte ekleyin:

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