अक्सर पूछे जाने वाले सवाल


Closure Compiler क्या है? मुझे इसका इस्तेमाल क्यों करना चाहिए?
Closure Compiler एक ऐसा टूल है जिसकी मदद से JavaScript को तेज़ी से डाउनलोड और चलाया जा सकता है. Closure Compiler का इस्तेमाल करके, JavaScript फ़ाइलों का साइज़ कम किया जा सकता है. साथ ही, उन्हें ज़्यादा असरदार बनाया जा सकता है.
Closure Compiler, JavaScript को कंप्रेस करने वाले अन्य टूल से किस तरह अलग है?

आम तौर पर, Closure Compiler को कोड छोटा करने वाले अन्य टूल की तुलना में, बेहतर तरीके से कोड को कंप्रेस करना चाहिए. साथ ही, आपके वेब ऐप्लिकेशन के डाउनलोड होने में लगने वाले समय को कम करना चाहिए. इसके अलावा, Closure Compiler की मदद से डेवलपमेंट के दौरान (टेस्टिंग के दौरान नहीं) सिंटैक्स से जुड़ी गड़बड़ियों का पता लगाया जा सकता है. साथ ही, गड़बड़ी वाले कोड पैटर्न की पहचान की जा सकती है.

सिंपल मोड में, Closure Compiler को अन्य टूल की तुलना में बेहतर काम करना चाहिए. ऐसा इसलिए, क्योंकि यह कंपाइलर की तरह विश्लेषण करके, कोड के साइज़ को कम करने के अतिरिक्त तरीके ढूंढता है. उदाहरण के लिए, Closure Compiler इनलाइन फ़ंक्शन का इस्तेमाल सिर्फ़ कुछ मामलों में कर सकता है. साथ ही, यह वैरिएबल के नामों का फिर से इस्तेमाल कर सकता है और कॉन्स्टेंट एक्सप्रेशन को पहले से कंप्यूट कर सकता है.

ऐडवांस मोड में, Closure Compiler, जोड़ी गई टाइप एनोटेशन का इस्तेमाल करके, ऐसे बग ढूंढ सकता है जिन्हें ढूंढना मुश्किल होता है.

क्या Closure Compiler, एचटीएमएल में एम्बेड किए गए JavaScript को कंपाइल कर सकता है?
नहीं. Closure Compiler सिर्फ़ उन फ़ाइलों पर काम करता है जिनमें सिर्फ़ JavaScript होती है.
क्या Closure Compiler का इस्तेमाल, अन्य JavaScript minifier के साथ किया जा सकता है?

हां. Closure Compiler, किसी भी मान्य JavaScript को पढ़ता है और मान्य JavaScript जनरेट करता है. इसलिए, Closure Compiler को JavaScript फ़ाइल पर लागू किया जा सकता है. ऐसा, फ़ाइल को किसी दूसरे मिनिफ़ायर से चलाने से पहले या बाद में किया जा सकता है.

ध्यान रखें कि Closure Compiler और अन्य minifier, आने वाले कोड के बारे में कुछ उम्मीदें रख सकते हैं. टिप्पणियों को हटाने वाला कोई मिनीफ़ायर, लाइसेंस या एनोटेशन की ऐसी जानकारी हटा सकता है जिसकी ज़रूरत किसी दूसरे टूल को होती है.

Closure Compiler से जनरेट किए गए JavaScript को कैसे डीबग किया जा सकता है?
अगर आपके कंपाइल किए गए कोड में गड़बड़ियां आ रही हैं या वह उम्मीद के मुताबिक काम नहीं कर रहा है, तो समस्या को ठीक करने के लिए, सोर्स मैप का इस्तेमाल किया जा सकता है. सोर्स मैप, कंपाइल किए गए कोड और ओरिजनल सोर्स कोड के बीच मैपिंग उपलब्ध कराता है. इससे ब्राउज़र के डेवलपर टूल, आपको कंपाइल किए गए कोड के बजाय ओरिजनल सोर्स कोड दिखा सकते हैं. Closure Compiler से सोर्स मैप जनरेट कराने के लिए, कमांड लाइन पर --create_source_map फ़्लैग पास करें. उदाहरण के लिए:
$ java -jar compiler.jar --js example.js --create_source_map ./example-map --js_output_file example-compiled.js
इसके बाद, अगर सोर्स मैप की सुविधा देने वाले ब्राउज़र (जैसे कि Chrome या Firefox) का इस्तेमाल किया जा रहा है, तो बिना कंपाइल किए गए कोड के लिए ब्रेकपॉइंट सेट किए जा सकते हैं. साथ ही, ब्राउज़र के डेवलपर टूल, ओरिजनल सोर्स में कोड की लाइन दिखाएंगे. Chrome के डेवलपर टूल के बारे में ज़्यादा जानने के लिए, JavaScript को डीबग करना लेख पढ़ें. इसमें सोर्स मैप के बारे में भी जानकारी दी गई है.
क्या कंपाइलर, मेरे ऐप्लिकेशन की एक्ज़ीक्यूशन स्पीड और डाउनलोड कोड साइज़ के बीच कोई समझौता करता है?
हां. ऑप्टिमाइज़ करने वाला कोई भी कंपाइलर, ट्रेड-ऑफ़ करता है. आकार को ऑप्टिमाइज़ करने से, स्पीड पर थोड़ा असर पड़ता है. हालांकि, Closure Compiler के डेवलपर ने इस बात का ध्यान रखा है कि इससे रनटाइम में ज़्यादा बढ़ोतरी न हो. कंपाइलर के कुछ ऑप्टिमाइज़ेशन से रनटाइम भी कम हो जाता है (अगला सवाल देखें).
क्या कंपाइलर, स्पीड के लिए ऑप्टिमाइज़ करता है?
ज़्यादातर मामलों में, छोटा कोड तेज़ी से काम करता है. ऐसा इसलिए, क्योंकि वेब ऐप्लिकेशन में डाउनलोड होने में लगने वाला समय, आम तौर पर सबसे अहम होता है. ऑप्टिमाइज़ेशन की मदद से, कोड में मौजूद गैर-ज़रूरी जानकारी को कम किया जाता है. इससे कोड को तेज़ी से चलाने में भी मदद मिलती है.
क्या कंपाइल की जा सकने वाली फ़ाइलों के साइज़ पर कोई पाबंदी है?
कंपाइलेशन वेब सेवा के लिए, फ़ाइल के साइज़ की सीमा तय की गई है. हालांकि, स्टैंडअलोन कंपाइलर ऐप्लिकेशन के लिए ऐसी कोई सीमा नहीं है.
क्या Closure Compiler सभी प्लैटफ़ॉर्म के लिए उपलब्ध है?
कंपाइलर को Java में लिखा गया है. इसलिए, इसे ऐसी किसी भी जगह पर चलाया जा सकता है जहां Java चलता है.
क्या कंपाइलर, किसी भी मान्य JavaScript को प्रोसेस कर सकता है?
ज़्यादातर. कुछ JavaScript कंस्ट्रक्ट, जैसे कि eval() और with(), उन मान्यताओं को अमान्य कर सकते हैं जिनके आधार पर कंपाइलर के ट्रांसफ़ॉर्मेशन किए जाते हैं.
Closure Compiler का इस्तेमाल करने के लिए, मुझे वेब डेवलपमेंट के बारे में कितना जानना होगा?
Closure Compiler, JavaScript डेवलपमेंट के लिए एक टूल है. इसलिए, आपको कंपाइलर का इस्तेमाल करने के लिए, JavaScript में प्रोग्रामिंग करने का तरीका पता होना चाहिए. हालांकि, JavaScript का इस्तेमाल करने वाला कोई भी व्यक्ति, Closure Compiler का इस्तेमाल करके फ़ायदा पा सकता है.
Closure Compiler, Closure Library के साथ कैसे काम करता है?
Closure Compiler, Closure Library का इस्तेमाल करने वाले कोड के लिए खास जांच और ऑप्टिमाइज़ेशन की सुविधा देता है. इसके अलावा, Closure Compiler सेवा, Closure Library फ़ाइलों को अपने-आप शामिल कर सकती है. Finding Your Way around Closure में, Closure के उन हिस्सों को डिक्लेयर करने के सिंटैक्स के बारे में बताया गया है जिनकी आपको ज़रूरत है. एपीआई के साथ Closure Library का इस्तेमाल करने के बारे में जानकारी पाने के लिए, एपीआई रेफ़रंस देखें. Closure Compiler ऐप्लिकेशन के साथ Closure Library का इस्तेमाल करने के लिए, आपको पहले Closure Library डाउनलोड करनी होगी. Closure Library के लिए सहायता, कंपाइलर ऐप्लिकेशन में डिफ़ॉल्ट रूप से चालू होती है.
ADVANCED_OPTIMIZATIONS का इस्तेमाल करके कंपाइल करने पर, मेरा कोड काम नहीं करता या कंपाइलर गड़बड़ियां दिखाता है. क्यों?
ऐडवांस मोड का इस्तेमाल करने के लिए, आम तौर पर कुछ तैयारी और कोड में बदलाव करने पड़ते हैं. ऐडवांस कंपाइलेशन और एक्सटर्न में बताया गया है कि यह कैसे पक्का किया जाए कि आपका कोड ADVANCED_OPTIMIZATIONS के साथ काम करता है.
कंपाइल की गई स्क्रिप्ट में लाइन फ़ीड क्यों दिखते हैं?
Closure Compiler, हर 500 वर्णों के बाद जान-बूझकर लाइन ब्रेक जोड़ता है. फ़ायरवॉल और प्रॉक्सी, कभी-कभी बहुत लंबी लाइनों वाली बड़ी JavaScript फ़ाइलों को खराब कर देते हैं या उन्हें अनदेखा कर देते हैं. हर 500 वर्णों के बाद लाइन ब्रेक जोड़ने से, इस समस्या को रोका जा सकता है. लाइन ब्रेक हटाने से, स्क्रिप्ट के सिमैंटिक पर कोई असर नहीं पड़ता. कोड के साइज़ पर इसका कम असर पड़ता है. साथ ही, कंपाइलर लाइन ब्रेक की जगह को ऑप्टिमाइज़ करता है, ताकि फ़ाइलों को gzip करने पर कोड के साइज़ पर लगने वाला जुर्माना और भी कम हो जाए.
मेरे पास कॉपीराइट की सूचनाएं या ओपन सोर्स लाइसेंस का टेक्स्ट है, जिसे मेरे सोर्स कोड में दिखना चाहिए. मैं Closure Compiler को इस टेक्स्ट को हटाने से कैसे रोकूं?
Closure Compiler, JSDoc @license टैग के साथ काम करता है. कंपाइलर के आउटपुट में टिप्पणी को बनाए रखने के लिए, किसी भी JSDoc टिप्पणी में @license टैग जोड़ें. ज़्यादा जानकारी के लिए, Closure Compiler के लिए JavaScript को एनोटेट करना लेख पढ़ें.