Closure Compiler में, कंपाइल करने के तीन लेवल में से किसी एक को चुना जा सकता है. इनमें से सबसे आसान लेवल में, सिर्फ़ व्हाइटस्पेस और टिप्पणियों को हटाया जाता है. वहीं, सबसे मुश्किल लेवल में कोड को पूरी तरह से बदल दिया जाता है.
WHITESPACE_ONLY
WHITESPACE_ONLY
कंपाइलेशन लेवल, आपके कोड से टिप्पणियां हटा देता है. साथ ही, लाइन ब्रेक, गैर-ज़रूरी स्पेस, अतिरिक्त विराम चिह्न (जैसे कि कोष्ठक और सेमीकोलन) और अन्य व्हाइटस्पेस भी हटा देता है. आउटपुट JavaScript, सोर्स JavaScript की तरह ही काम करता है.
अगर अनुरोध की गई आउटपुट भाषा का मोड, इनपुट भाषा के मोड से अलग है, तो भाषा की सुविधाओं का ट्रांसपाइलेशन अब भी होगा.
फ़्लैग और विकल्प में --language_in
और --language_out
देखें.
इस कंपाइलेशन लेवल में, तीनों लेवल में से सबसे कम कंप्रेस किया जाता है.
SIMPLE_OPTIMIZATIONS
SIMPLE_OPTIMIZATIONS
कंपाइलेशन लेवल, WHITESPACE_ONLY
की तरह ही खाली जगह और टिप्पणियों को हटाने का काम करता है. हालांकि, यह एक्सप्रेशन और फ़ंक्शन में ऑप्टिमाइज़ेशन भी करता है. इसमें लोकल वैरिएबल और फ़ंक्शन पैरामीटर के नाम बदलकर छोटे नाम रखना शामिल है. वैरिएबल के नाम छोटे करने से, कोड का साइज़ काफ़ी कम हो जाता है. SIMPLE_OPTIMIZATIONS
लेवल, सिर्फ़ उन सिंबल के नाम बदलता है जो फ़ंक्शन के लिए लोकल होते हैं. इसलिए, यह कंपाइल किए गए JavaScript और अन्य JavaScript के बीच इंटरैक्शन में कोई रुकावट नहीं डालता.
SIMPLE_OPTIMIZATIONS
के साथ कंपाइल करने पर, सिंटैक्टिक तौर पर मान्य JavaScript की सुविधा हमेशा बनी रहती है. हालांकि, इसके लिए यह ज़रूरी है कि कोड, स्ट्रिंग के नामों का इस्तेमाल करके लोकल वैरिएबल को ऐक्सेस न करे. उदाहरण के लिए, eval()
स्टेटमेंट का इस्तेमाल करके या फ़ंक्शन पर toString को कॉल करके.
SIMPLE_OPTIMIZATIONS
डिफ़ॉल्ट कंपाइलेशन लेवल है.
ADVANCED_OPTIMIZATIONS
ADVANCED_OPTIMIZATIONS
कंपाइलेशन लेवल, SIMPLE_OPTIMIZATIONS
की तरह ही ट्रांसफ़ॉर्मेशन करता है. हालांकि, यह सभी तीन लेवल में सबसे ज़्यादा कंप्रेस करने के लिए, कई और ग्लोबल ट्रांसफ़ॉर्मेशन जोड़ता है. ADVANCED_OPTIMIZATIONS
लेवल, JavaScript को इस तरह से कंप्रेस करता है कि अन्य टूल ऐसा नहीं कर पाते.
ज़्यादा कंप्रेशन की सुविधा चालू करने के लिए, ADVANCED_OPTIMIZATIONS
कंपाइल किए गए कोड के बारे में कुछ अनुमान लगाता है. अगर आपका कोड इन मान्यताओं के मुताबिक नहीं है, तो ADVANCED_OPTIMIZATIONS
ऐसा कोड जनरेट करेगा जो काम नहीं करेगा.
उदाहरण के लिए, ADVANCED_OPTIMIZATIONS
के साथ कंपाइल किया गया कोड, बिना कंपाइल किए गए कोड के साथ काम नहीं कर सकता. हालांकि, अगर इंटरऑपरेबिलिटी को पक्का करने के लिए खास तरीके अपनाए जाएं, तो ऐसा हो सकता है. अगर आपने अपने कोड में रेफ़र की गई बाहरी फ़ंक्शन और प्रॉपर्टी को फ़्लैग नहीं किया है, तो Closure Compiler आपके कोड में रेफ़रंस का नाम गलत तरीके से बदल देगा. इससे आपके कोड और बाहरी कोड में मौजूद नामों के बीच अंतर आ जाएगा.
ADVANCED_OPTIMIZATIONS
के लिए कोड तैयार करने के तरीके के बारे में ज़्यादा जानने के लिए, ऐडवांस कंपाइलेशन और एक्सटर्न पढ़ें.
ADVANCED_OPTIMIZATIONS
ट्रांसफ़ॉर्मेशन में ये शामिल हैं:
- नाम बदलने की ज़्यादा बेहतर सुविधा:
SIMPLE_OPTIMIZATIONS
के साथ कंपाइल करने पर, सिर्फ़ फ़ंक्शन में मौजूद पैरामीटर और वैरिएबल के नाम बदले जाते हैं.ADVANCED_OPTIMIZATIONS
ग्लोबल वैरिएबल, फ़ंक्शन के नाम, और प्रॉपर्टी के नाम भी बदलता है. - डेड कोड हटाने की सुविधा:
ADVANCED_OPTIMIZATIONS
के साथ कंपाइल करने पर, ऐसे कोड को हटा दिया जाता है जिसे कभी नहीं चलाया जा सकता. यह सुविधा, बड़ी लाइब्रेरी के साथ इस्तेमाल करने पर ज़्यादा फ़ायदेमंद होती है. अगर किसी बड़ी लाइब्रेरी फ़ाइल के सिर्फ़ कुछ फ़ंक्शन इस्तेमाल किए जाते हैं, तो कंपाइलर अपने आउटपुट से उन फ़ंक्शन को छोड़कर बाकी सभी फ़ंक्शन हटा सकता है. - ग्लोबल इनलाइनिंग:
ADVANCED_OPTIMIZATIONS
के साथ कंपाइल करने पर, फ़ंक्शन कॉल को फ़ंक्शन के मुख्य हिस्से से बदल दिया जाता है. इस ट्रांसफ़ॉर्मेशन को "इनलाइनिंग" कहा जाता है. कंपाइलर सिर्फ़ तब फ़ंक्शन इनलाइन करता है, जब उसे लगता है कि इनलाइन करना सुरक्षित है और इससे जगह बचती है. कंपाइलेशनADVANCED_OPTIMIZATIONS
के साथ, कॉन्स्टेंट और कुछ वैरिएबल को भी इनलाइन करता है. ऐसा तब होता है, जब कंपाइलर यह तय करता है कि ऐसा सुरक्षित तरीके से किया जा सकता है.
कंपाइलेशन लेवल सेट करने का तरीका
Closure Compiler ऐप्लिकेशन में कंपाइलेशन लेवल सेट करने के लिए,
कमांड लाइन फ़्लैग --compilation_level
को शामिल करें. साथ ही,
WHITESPACE_ONLY
, SIMPLE
,
या ADVANCED
की वैल्यू शामिल करें. जैसे, यहां दी गई कमांड में:
java -jar compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS --js hello.js