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


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

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

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

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

क्या क्लोज़र कंपाइलर HTML में एम्बेड की गई JavaScript को कंपाइल कर सकता है?
नहीं. क्लोज़र कंपाइलर सिर्फ़ उन फ़ाइलों पर काम करता है जिनमें सिर्फ़ JavaScript शामिल हो.
क्या क्लोज़र कंपाइलर को अन्य JavaScript मिनीफ़ायर के साथ इस्तेमाल किया जा सकता है?

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

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

क्लोज़र कंपाइलर के बनाए JavaScript को कैसे डीबग किया जा सकता है?
अगर आपका इकट्ठा किया गया कोड ऐसी गड़बड़ियां दिखाता है जिनसे आपको उम्मीद नहीं है या जिनकी उम्मीद नहीं है, तो समस्या को डीबग करने के लिए, सोर्स मैप का इस्तेमाल किया जा सकता है. सोर्स मैप, कंपाइल किए गए कोड और ओरिजनल सोर्स कोड के बीच मैपिंग की सुविधा देता है, ताकि ब्राउज़र के डेवलपर टूल, आपको कंपाइल किए गए कोड के बजाय आपका ओरिजनल सोर्स कोड दिखा सकें. क्लोज़र कंपाइलर को सोर्स मैप बनाने के लिए, कमांड लाइन पर मौजूद --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 डीबग करना देखें.
क्या कंपाइलर मेरे ऐप्लिकेशन के एक्ज़ीक्यूशन की स्पीड और डाउनलोड के कोड के साइज़ के बीच कोई अंतर करता है?
हां. कोई भी कंपाइलर ऑप्टिमाइज़ करता है. कुछ साइज़ ऑप्टिमाइज़ेशन, छोटी गति से जुड़े ओवरहेड के बारे में बताते हैं. हालांकि, क्लोज़र कंपाइलर के डेवलपर इस बात का खास ध्यान रखते हैं कि ज़्यादा रनटाइम न बनाया जाए. कंपाइलर के कुछ ऑप्टिमाइज़ेशन रनटाइम को भी कम कर देते हैं (अगला सवाल देखें).
क्या कंपाइलर स्पीड के लिए ऑप्टिमाइज़ करता है?
ज़्यादातर मामलों में छोटे कोड तेज़ी से काम करते हैं, क्योंकि आम तौर पर डाउनलोड के समय वेब ऐप्लिकेशन में डाउनलोड करना सबसे अहम होता है. बार-बार होने वाली सुविधाओं को कम करने वाले ऑप्टिमाइज़ेशन से, कोड रन करने का समय भी बढ़ जाता है.
क्या कंपाइल की जा सकने वाली फ़ाइलों के साइज़ पर कोई पाबंदी लगी है?
कंपाइलेशन वेब सेवा का साइज़ ज़्यादा से ज़्यादा पर हो सकता है, लेकिन स्टैंडअलोन कंपाइलर ऐप्लिकेशन में ऐसा नहीं किया जा सकता.
क्या क्लोज़र कंपाइलर सभी प्लैटफ़ॉर्म के लिए उपलब्ध है?
कंपाइलर, Java में लिखा जाता है, ताकि यह हर उस जगह पर चल सके जहां Java चलता है.
क्या कंपाइलर किसी कानूनी JavaScript को प्रोसेस कर सकता है?
ज़्यादातर. कुछ JavaScript कंस्ट्रक्ट, जिनमें eval() और with() शामिल हैं, उन अनुमानों को अमान्य कर सकते हैं जिनके आधार पर कंपाइलर के ट्रांसफ़ॉर्मेशन होते हैं.
क्लोज़र कंपाइलर का इस्तेमाल करने के लिए, मुझे वेब डेवलपमेंट के बारे में कितनी जानकारी चाहिए?
क्लोज़र कंपाइलर, JavaScript डेवलपमेंट के लिए एक टूल है. इसलिए, आपको यह पता होना चाहिए कि कंपाइलर इस्तेमाल करने के लिए, JavaScript में प्रोग्राम कैसे करना चाहिए. हालांकि, JavaScript का इस्तेमाल करने वाला कोई भी व्यक्ति क्लोज़र कंपाइलर इस्तेमाल करके फ़ायदा पा सकता है.
क्लोज़र कंपाइलर, क्लोज़र लाइब्रेरी के साथ कैसे काम करता है?
Closure Compiler, Closure Library का इस्तेमाल करने वाले कोड के लिए खास जांच और ऑप्टिमाइज़ेशन की सुविधा देता है. साथ ही, क्लोज़र कंपाइलर सेवा अपने-आप क्लोज़र लाइब्रेरी की फ़ाइलें सेव कर सकती है. बंद करने का अपना तरीका ढूंढना, आपको क्लोज़र के उन हिस्सों के बारे में जानकारी देने के लिए सिंटैक्स के बारे में बताता है जिनकी आपको ज़रूरत है. एपीआई के साथ क्लोज़र लाइब्रेरी का इस्तेमाल करने के बारे में जानने के लिए, एपीआई से जुड़ी जानकारी देखें. क्लोज़र कंपाइलर के साथ, क्लोज़र लाइब्रेरी का इस्तेमाल करने के लिए, आपको पहले क्लोज़र लाइब्रेरी डाउनलोड करनी होगी. कंपाइलर ऐप्लिकेशन में, क्लोज़र लाइब्रेरी की सुविधा डिफ़ॉल्ट रूप से चालू रहती है.
मेरा कोड काम करना बंद कर देता है या जब मैं ADVANCED_OPTIMIZATIONS के साथ कंपाइल करता/करती हूं, तो कंपाइलर गड़बड़ियां देता है. ऐसा क्यों?
आम तौर पर, 'बेहतर मोड' का इस्तेमाल करने के लिए, कोड तैयार करने और कोड में कुछ बदलाव करने पड़ते हैं. बेहतर कंपाइलेशन और एक्सटेंशन, यह पक्का करने का तरीका बताते हैं कि आपका कोड ADVANCED_OPTIMIZATIONS के साथ काम करता है या नहीं.
कंपाइल की गई स्क्रिप्ट में रैंडम लाइन फ़ीड क्यों होते हैं?
क्लोज़र कंपाइलर जान-बूझकर हर 500 वर्णों में लाइन ब्रेक जोड़ता है. फ़ायरवॉल और प्रॉक्सी कभी-कभी खराब हो जाते हैं या लंबी लाइनों वाली बड़ी JavaScript फ़ाइलों को अनदेखा कर देते हैं. हर 500 वर्णों में लाइन जोड़ने से यह समस्या हल नहीं होती. लाइन ब्रेक हटाने से स्क्रिप्ट के सिमेंटिक पर कोई असर नहीं पड़ता. कोड साइज़ पर असर कम होता है. कंपाइलर लाइन ब्रेक प्लेसमेंट को ऑप्टिमाइज़ करता है, ताकि फ़ाइलें gzip किए जाने पर कोड साइज़ जुर्माना और भी कम हो जाए.
मेरे पास कॉपीराइट की सूचनाएं या ओपन सोर्स लाइसेंस का टेक्स्ट है, जो मेरे सोर्स कोड में दिखना चाहिए. मैं क्लोज़र कंपाइलर को यह टेक्स्ट पढ़ने से कैसे रोकूं?
क्लोज़र कंपाइलर, JSDoc @license टैग के साथ काम करता है. कंपाइलर आउटपुट में टिप्पणी को सुरक्षित रखने के लिए, JSDoc टिप्पणी में @license टैग जोड़ें. ज़्यादा जानकारी के लिए, Closure कंपाइलर के लिए JavaScript की व्याख्या करना देखें.