क्लोज़र कंपाइलर लेवल

क्लोज़र कंपाइलर की मदद से, कंपाइलेशन के तीन लेवल में से चुना जा सकता है. इनमें, खाली सफ़ेद जगह और टिप्पणियां हटाना शामिल है. साथ ही, कोड को तेज़ी से बदलना भी शामिल है.

सिर्फ़ WH_TESPACE_ONLY

WHITESPACE_ONLY कंपाइलेशन लेवल आपके कोड से टिप्पणियां हटा देता है और लाइन ब्रेक, ग़ैर-ज़रूरी खाली जगहें, ग़ैर-ज़रूरी विराम चिह्न (जैसे कि ब्रैकेट और सेमीकोलन) और दूसरी खाली सफ़ेद जगहों को भी हटा देता है. आउटपुट JavaScript, सोर्स JavaScript की तरह काम करती है.

अगर अनुरोध किया गया आउटपुट भाषा मोड, इनपुट भाषा मोड से अलग है, तो भाषा की सुविधाओं को ट्रांसलिट्रेट किया जाएगा. फ़्लैग और विकल्प में --language_in और --language_out को देखें.

यह कंपाइलेशन लेवल, तीनों लेवल पर कंप्रेस करने की सुविधा देता है.

सिमP_OPTIMIZATIONS

SIMPLE_OPTIMIZATIONS कंपाइलेशन लेवल, WHITESPACE_ONLY की तरह खाली सफ़ेद जगह और टिप्पणी हटाने की कार्रवाई करता है, लेकिन यह एक्सप्रेशन और फ़ंक्शन में ऑप्टिमाइज़ेशन भी करता है. इनमें लोकल वैरिएबल और फ़ंक्शन पैरामीटर के नाम छोटे करना भी शामिल हैं. वैरिएबल का नाम बदलने से, छोटे नामों का इस्तेमाल करने से कोड काफ़ी छोटा हो जाता है. SIMPLE_OPTIMIZATIONS लेवल, सिर्फ़ उन सिंबल का नाम बदलता है जो फ़ंक्शन के लिए लोकल होते हैं. इसलिए, यह कंपाइल की गई JavaScript और अन्य JavaScript के बीच इंटरैक्शन में रुकावट नहीं डालता.

SIMPLE_OPTIMIZATIONS के साथ मिलकर काम करने पर, सिंटैक्स में मान्य JavaScript का ही काम किया जाता है. हालांकि, ऐसा करने पर कोड, स्ट्रिंग के नामों का इस्तेमाल करके लोकल वैरिएबल को ऐक्सेस नहीं करता है. उदाहरण के लिए, eval() स्टेटमेंट का इस्तेमाल करके या फ़ंक्शन पर स्ट्रिंग को कॉल करके.

SIMPLE_OPTIMIZATIONS, कंपाइलेशन का डिफ़ॉल्ट लेवल है.

बेहतर_ऑप्टिमाइज़ेशन

ADVANCED_OPTIMIZATIONS कंपाइलेशन लेवल में वही बदलाव होते हैं जो SIMPLE_OPTIMIZATIONS में होते हैं. हालांकि, इन तीनों लेवल पर सबसे ज़्यादा कंप्रेस करने के लिए, दुनिया भर में कई तरह के असरदार बदलाव किए जाते हैं. ADVANCED_OPTIMIZATIONS लेवल, JavaScript को कंप्रेस करता है. इससे, दूसरे टूल की मदद से ज़्यादा बेहतर नतीजे मिल पाते हैं.

एक्स्ट्रीम कैलकुलेशन के इस तरीके को चालू करने के लिए, ADVANCED_OPTIMIZATIONS कंपाइल किए गए कोड के बारे में बेहतर अनुमान लगाता है. अगर आपका कोड इन अनुमानों के मुताबिक नहीं है, तो ADVANCED_OPTIMIZATIONS चलने वाला कोड जनरेट करेगा.

उदाहरण के लिए, हो सकता है कि ADVANCED_OPTIMIZATIONS के साथ कंपाइल किया गया कोड, कंपाइल किए गए कोड के साथ तब तक काम न करे, जब तक कि इंटरऑपरेबिलिटी (दूसरे सिस्टम के साथ काम करना) के लिए कोई खास तरीका न अपनाया जाए. अगर आप अपने कोड में बताई गई बाहरी सुविधाओं और प्रॉपर्टी को फ़्लैग नहीं करते हैं, तो क्लोज़र कंपाइलर आपके कोड में मौजूद पहचान फ़ाइलों का नाम बदल देगा. इससे, आपके कोड और बाहरी कोड में दिए गए नाम एक-दूसरे से मेल नहीं खाएंगे.

ADVANCED_OPTIMIZATIONS के लिए अपना कोड तैयार करने के बारे में ज़्यादा जानने के लिए, बेहतर कंपाइलेशन और एक्सटेंशन पढ़ें.

ADVANCED_OPTIMIZATIONS कन्वर्ज़न में ये शामिल हैं:

  • ज़्यादा असरदार नाम बदलना:

    SIMPLE_OPTIMIZATIONS के साथ कंपाइल करने पर, फ़ंक्शन में पैरामीटर और वैरिएबल का नाम बदला जाता है. ADVANCED_OPTIMIZATIONS ग्लोबल वैरिएबल, फ़ंक्शन के नाम, और प्रॉपर्टी का नाम भी बदलता है.

  • डेड कोड हटाना:

    ADVANCED_OPTIMIZATIONS के साथ जोड़कर वह कोड हटा दिया जाता है जिसे ऐक्सेस नहीं किया जा सकता. यह तरीका खास तौर पर, बड़ी लाइब्रेरी के साथ मिलकर काम करता है. अगर किसी बड़ी लाइब्रेरी फ़ाइल में से कुछ ही फ़ंक्शन का इस्तेमाल किया जाता है, तो कंपाइलर अपने आउटपुट से उन फ़ंक्शन को छोड़कर बाकी सभी फ़ंक्शन हटा सकता है.

  • ग्लोबल इनलाइनिंग:

    ADVANCED_OPTIMIZATIONS के साथ जोड़कर कुछ फ़ंक्शन कॉल को फ़ंक्शन के मुख्य हिस्से से बदल दिया जाता है. इस बदलाव को "इनलाइनिंग" कहा जाता है. कंपाइलर सिर्फ़ तब इनलाइन करता है, जब उसे यह पता चलता है कि इनलाइनिंग सुरक्षित है और जगह बचाती है. ADVANCED_OPTIMIZATIONS के साथ कंपाइलेशन, कॉन्सटेंट और कुछ वैरिएबल को भी इनलाइन करता है. ऐसा तब होता है, जब कंपाइलर यह पक्का कर ले कि वह ऐसा कर सकता है.

कंपाइलेशन लेवल सेट करने का तरीका

क्लोज़र कंपाइलर सेवा यूज़र इंटरफ़ेस (यूआई), सेवा एपीआई, और ऐप्लिकेशन के लिए compilation_level सेट अप करने के तरीके अलग-अलग होते हैं.

क्लोज़र कंपाइलर सेवा के यूज़र इंटरफ़ेस (यूआई) में

क्लोज़र कंपाइलर सेवा यूज़र इंटरफ़ेस (यूआई) में कंपाइलेशन लेवल सेट करने के लिए, इंटरफ़ेस के ऑप्टिमाइज़ेशन सेक्शन में मौजूद रेडियो बटन पर क्लिक करें.

यूज़र इंटरफ़ेस (यूआई) का स्क्रीनशॉट

क्लोज़र कंपाइलर सेवा एपीआई में

क्लोज़र कंपाइलर सेवा एपीआई में कंपाइलेशन लेवल सेट करने के लिए, compilation_level, WHITESPACE_ONLY, SIMPLE_OPTIMIZATIONS या ADVANCED_OPTIMIZATIONS की वैल्यू वाला एक अनुरोध पैरामीटर शामिल करें, जैसा कि इस Python प्रोग्राम में किया गया है:

#!/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()

क्लोज़र कंपाइलर ऐप्लिकेशन में

क्लोज़र कंपाइलर ऐप्लिकेशन में कंपाइलेशन लेवल सेट करने के लिए, कमांड लाइन फ़्लैग को --compilation_level, WHITESPACE_ONLY, SIMPLE या ADVANCED की वैल्यू के साथ शामिल करें. इसका तरीका नीचे बताया गया है:

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