2010-05-20 19 views
7

यदि आप एक HTML फ़ाइल में स्क्रिप्ट src = "/ path/to/nonexistent/file.js" करते हैं और ब्राउज़र में कॉल करते हैं, और HTML फ़ाइल में कहीं भी निर्भरता या संसाधन नहीं हैं जो फ़ाइल या कोड की अपेक्षा करते हैं वास्तव में अस्तित्व में है, क्या ऐसा करने के बारे में कुछ भी बुरा व्यवहार है?क्या जावास्क्रिप्ट फ़ाइल को सोर्सिंग करने का कोई नकारात्मक प्रभाव है जो वास्तव में मौजूद नहीं है?

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

चूंकि उपयोगकर्ता को कोई त्रुटि दिखाई नहीं दे रही है, तो क्या इस अभ्यास को व्यवहार्य विकल्प माना जाना चाहिए?

उत्तर

1

यदि आपके पास <head> टैग में निर्दिष्ट स्क्रिप्ट है, (स्टार्टर्स के लिए अनुशंसित नहीं है), तो यह प्रारंभिक पृष्ठ-रेंडर समय को कुछ हद तक धीमा कर देगा।

यदि 404 लौटने की बजाय, आपकी साइट केवल कनेक्शन स्वीकार करती है और फिर कभी प्रतिक्रिया नहीं देती है, तो यह पृष्ठ को लोड करने के लिए अनिश्चित समय ले सकता है, और कुछ मामलों में, पूरे उपयोगकर्ता इंटरफ़ेस को लॉक कर सकता है।

(कम से कम कि फ़ायर्फ़ॉक्स में से एक संशोधन के साथ भी थी पर, मुझे आशा है कि वे इसे ठीक करने के बाद के बाद से मैंने देखा कि ~ हुआ 2 साल पहले। *)

आपको कम से कम में कम के रूप में टैग रखना चाहिए पेज ऑर्डर के रूप में आप इस समस्या का समाधान करने के लिए बर्दाश्त कर सकते हैं।

आपकी सबसे अच्छी शर्त अब तक एक निरंतर नो-ऑप यूआरएल है जिसका उपयोग सभी "जावास्क्रिप्ट फाइलों" के लिए भरने के रूप में नहीं किया जाता है, जो यूए को बताते हुए HTTP हेडर के साथ 0-बाइट प्रतिक्रिया देता है डॉन ': पहली हिट परे> ग्राहक लोड दंड (और कहा कि शायद ही यहां तक ​​कि तु-Olde डायलअप पर लोगों को चोट चाहिए)

* सबक सीखा - यह कैश करने के लिए जब तक शाम होने आते हैं, कि ज्यादातर अपने सर्वर < नकारना चाहिए टी में स्क्रिप्ट-एनआरजी संदर्भ डालें, विशेष रूप से आपकी मशीन के बाहर होस्ट की गई तृतीय-पक्ष स्क्रिप्ट के लिए, क्योंकि तब आप ग्राहकों को अपनी वेबसाइट तक पहुंचने में सक्षम होने का आनंद ले सकते हैं, लेकिन थोड़ी देर के कारण पृष्ठ का जोखिम अक्षम हो सकता है विज्ञापन जेएस जो कुछ इंटरनेट के कारण पहुंच योग्य नहीं था irdness। भले ही वे एक प्रतिष्ठित-ईश तृतीय पक्ष हैं।

2

अच्छी तरह से बड़ी कमी प्रदर्शन है क्योंकि ब्राउज़र फ़ाइल डाउनलोड करने के लिए (हार्ड) कोशिश करेगा और आपका सर्वर इसकी तलाश करेगा। अंत में ब्राउज़र इसके बजाय 404 पेज डाउनलोड कर सकता है - इस प्रकार पृष्ठ लोड को धीमा कर देता है।

1

यदि आपका वेब सर्वर 404 त्रुटि पर काम करने के लिए कॉन्फ़िगर किया गया है ("आप इसे ढूंढ रहे हैं, आदि) तो आप सर्वर पर अनावश्यक लोड भी कर रहे हैं।

0

यदि आप इसे इस तरह कार्यान्वित करना चुनते हैं, तो आप वेब सर्वर को ट्यून कर सकते हैं कि यदि संदर्भित जेएस फ़ाइल नहीं मिली है, तो 404 के बजाय, यह एक रीडायरेक्ट (301) को खाली/डिफ़ॉल्ट जेएस फ़ाइल में वापस कर सकता है।

1
  1. आप अपने आप से पूछना चाहिए कि क्यों इस परीक्षण करने के लिए आलसी थे खुद :)

  2. मैं 1000 जावास्क्रिप्ट फ़ाइल नाम यादृच्छिक और इसे लोड करने के लिए कई नैनोसेकंड ले लिया परीक्षण किया है, इसलिए नहीं, यह एक नहीं है अंतर।उदाहरण:

स्क्रिप्ट src = "/ 7701992spolsky.js"

हालांकि यह मेरी स्थानीय मशीन पर था, तो यह ब्राउज़र के लिए एन * roundTripTime ले दूरस्थ सर्वर, जहां N के लिए यह पता लगाने की चाहिए खराब लिपियों की संख्या।

  1. हालांकि, आप यादृच्छिक डोमेन नाम मौजूद नहीं है कि है, तो
  2. तरह

स्क्रिप्ट src = "http://www.randomsite7701992.com/spolsky। जेएस "

तो इसमें एक लंबा एफ-इन समय लगेगा।

+1

तुम भी किसी के रमणीय जोखिम है कि डोमेन का पंजीकरण और वहाँ कुछ दुर्भावनापूर्ण डाल चलाने यहाँ एक उदाहरण है =)। खुशी ~! –

+1

@ चोर: बहुत आलसी ?! Egads नहीं! मुझे पता था कि तुम मुझे सिखाने की प्रतीक्षा कर रहे थे! जब आप सीधे मुख्य से सीख सकते हैं तो एक घबराहट क्यों घूमती है? ;) – dreftymac

0

यदि आप एएसपीनेट का उपयोग कर रहे हैं तो आप कस्टम हैंडलर (एएसएचएक्स फाइल) का उपयोग कर देख सकते हैं।

public class JavascriptHandler : IHttpHandler { 

    public void ProcessRequest (HttpContext context) 
    { 
     context.Response.ContentType = "text/plain"; 
     //Some code to check if javascript code exists 
     string js = ""; 

     if(JavascriptExists()) 
     { 
     js = GetJavascript(); 
     } 
     context.Response.write(js); 
    } 
} 

फिर अपने html शीर्षक में आप एक फ़ाइल कस्टम हैंडलर की ओर इशारा करते घोषित कर सकता है:

src="/js/javascripthandler.ashx" 
संबंधित मुद्दे