2009-05-27 16 views
12

फ़ायरबग निश्चित रूप से जावास्क्रिप्ट डिबगिंग के लिए एक अद्भुत टूल है; मैं console.log() का व्यापक रूप से उपयोग करता हूं।जावास्क्रिप्ट सर्वोत्तम अभ्यास: फायरबग-विशिष्ट कोड

मैं जानना चाहता था कि क्या मैं उत्पादन में फायरबग-विशिष्ट कोड छोड़ सकता हूं। सबसे अच्छा अभ्यास क्या है? डीबग कोड पर टिप्पणी कर रहे हैं?

उत्तर

14

आप console.log छोड़ देते हैं() अपने उत्पादन कोड में कहता है, तो साइट इंटरनेट एक्सप्लोरर का उपयोग आने वाले लोगों JavaScript त्रुटियों होगा। अगर उन लोगों के पास अतिरिक्त डिबगिंग उपकरण कॉन्फ़िगर किए गए हैं, तो वे ग़लत संवाद बॉक्स या पॉपअप देखेंगे। http://www.nabble.com/Re:-detect-firebug-existance-td19610337.html

2

मुझे इसके कारण कई सिरदर्द हैं।

मैं console.log() का बहुत उपयोग करता हूं, और हाल ही में, पाया गया है कि यह पूरे जेएस कोड को एफएफ के संस्करणों में विफल होने का कारण बनता है जो फ़ायरबग का उपयोग नहीं कर रहा है।

मैं आमतौर पर लाइव जाने से पहले एक खोज चलाता हूं, और इसे टिप्पणी करता हूं।

डी

14

से पहले इस ने काट लिया:

एक त्वरित खोज इस सूत्र के तरीकों पर चर्चा करता है, तो Firebug कंसोल मौजूद है पता लगाने के लिए पता चला। आदर्श रूप से सभी console.log स्टेटमेंट को उत्पादन से पहले हटा दिया जाना चाहिए, लेकिन यह त्रुटि प्रवण है और डेवलपर्स हमेशा भूल जाते हैं या केवल एफएफ + फ़ायरबग में परीक्षण करते हैं।

एक संभावित समाधान एक डमी कंसोल ऑब्जेक्ट बनाना है यदि कोई पहले से परिभाषित नहीं है। सावधानी के

if(typeof window.console == 'undefined'){ 
    window.console = { 
     log:function(){} 
    }; 
} 

एक शब्द: यह 10.4 है कि किसी भी कॉल console.log करने के लिए एक सुरक्षा अपवाद फेंक के रूप में सांत्वना वस्तु एक आरक्षित मैक ओएस डैशबोर्ड विजेट में इस्तेमाल वस्तु है पर सफारी के लिए मामला हुआ करता था। यकीन नहीं है कि यह मामला अब है, आज रात की जांच करेगा।

+0

सफारी का नवीनतम संस्करण 10.5 वास्तव में अपने वेब देव उपकरण में console.log() एपीआई का उपयोग सरल आवरण है, तो यह हो सकता है यदि आप हाल के संस्करणों का समर्थन कर रहे हैं तो कोई समस्या नहीं है। – ajm

+0

पर्याप्त उचित, लगा कि वे इसे बहुत लंबे समय तक तोड़ने नहीं देंगे –

8

व्यक्तिगत रूप से मैंने कंसोल संदर्भ पूर्व-संपीड़न को अलग करने के लिए कुछ समय पहले अपने कंप्रेसर को संशोधित किया था। रेगेक्स जोड़ने में कुछ मिनटों में परेशानी का जीवन बचाता है।

+0

बस सामान्य रूप से यह खतरनाक है, क्योंकि यह कोड को कोड के बजाय * टेक्स्ट * के रूप में मानता है और इस प्रकार 'var a = console; a.log ("test"); 'अभी भी एक त्रुटि फेंक देगा। बेशक यह असंभव है कि ऐसा कोई भी संदर्भ बनाया जाएगा, लेकिन बेहतर समाधान मौजूद हैं (ऊपर देखें) ऐसा करने के लिए मूर्खतापूर्ण प्रतीत होता है। –

3

बस सोचा कि मैं किसी भी जेएस डीबगिंग के लिए वास्तव में एक अच्छी युक्ति जोड़ूंगा .... कीवर्ड "डीबगर" का उपयोग करें, और कोड में ब्रेकपॉइंट की तरह, फ़ायरबग इसे एमएसआईई (यदि आपके पास विजुअल स्टूडियो है) का पता लगाता है यह और जैसा कि मैंने इसे एक ब्रेकपॉइंट कहा है।

बहुत से लोगों को इसके बारे में पता नहीं है लेकिन मुझे यह अनावश्यक पाया गया है ... अगर कोड चलाने वाले मशीन पर डीबगर स्थापित नहीं है, तो कुछ भी नहीं होता है और कोड ठीक हो जाता है। हालांकि मैं उन्हें वहां छोड़ने की सलाह नहीं दूंगा।

2

कुछ कंप्रेसर किसी भी लाइन को prefixed बाहर निकाल देंगे ;;; (जो तीन खाली बयान होने के लिए एक कानूनी अनुक्रम है।) इस तरह आप कंसोल संदर्भों तक कड़ाई से सीमित नहीं हैं (यानी आप कुछ गणना कर सकते हैं और फिर console.log() परिणाम अंत में कर सकते हैं, और कंप्रेसर कर सकते हैं उन सभी को बाहर निकालें।) मैं इसके लिए JavaScript::Minifier का उपयोग करता हूं।

1

मैं OOP जावास्क्रिप्ट में इस का उपयोग, लॉग की जाँच करता है कि फ़ायरबग मौजूद है के लिए अपने खुद के आवरण बनाने:

myclass.prototype.log = function() 
{ 
    if(typeof window.console != 'undefined') 
    { 
     console.log.apply(null, arguments); 
    } 
} 

बस फोन:

this.log(arg1, arg2, ...) 
0

बस एक चेतावनी है कि आईई देव उपकरण का समर्थन नहीं करता console.log पर लागू()।

कॉलिंग console.log.apply() कॉलिंग सक्रिय होने पर IE8 में अपवाद उठाएगा।

संबंधित मुद्दे