2010-12-01 8 views
5

जब आपका पृष्ठ पार्स किया जा रहा है, और यह <script src='someExternalSite/jquery.js'></script> या जो कुछ भी आता है, तब तक पृष्ठ तब तक प्रतीक्षा करता है जब तक कि उस फ़ाइल को डाउनलोड नहीं किया जाता है और पार्स जारी रखने से पहले उपलब्ध होता है?क्या बाहरी जावास्क्रिप्ट संदर्भ ब्राउज़र को डाउनलोड होने तक प्रतीक्षा करने का कारण बनते हैं?

जोड़ा गया:

अधिकांश ब्राउज़र एक साथ सभी (भले ही वे उन्हें क्रम में निष्पादित) समय बचाने के लिए स्क्रिप्ट डाउनलोड करते हैं?

उत्तर

2

प्रत्येक टैग पेज को आगे प्रस्तुत करने से अवरुद्ध करता है जब तक कि जेएस फ़ाइल पूरी तरह से डाउनलोड नहीं हो जाती। बॉडी टैग

0

सभी मुख्य ब्राउज़रों को सिंक्रनाइज़ रूप से सूची में अगली स्क्रिप्ट का कारण बनने की कोशिश करनी चाहिए, सूची में अगली लिपि का कारण एक ही समय पर भरोसा कर सकता है।

0

हाँ, यही वजह है कि लोग बस से पहले </body> टैग स्क्रिप्ट जोड़ने की सलाह देते हैं, या defer विशेषता का उपयोग।

2

जब तक कि फ़ाइल डाउनलोड किया है और पार्स करने के लिए जारी रखने से पहले उपलब्ध है पेज प्रतीक्षा करता है?

जेएस डाउनलोड होने तक यह केवल प्रतीक्षा नहीं करता है, यह तब तक प्रतीक्षा करता है जब तक इसे पार्स और निष्पादित नहीं किया जाता है। दूसरों को पृष्ठ के अंत में डालने के बारे में सलाह दी गई है।

क्या अधिकांश ब्राउज़र एक साथ (भले ही वे उन्हें क्रम में निष्पादित) समय को बचाने के लिए सभी स्क्रिप्ट डाउनलोड?

असल में, मुझे लगता है कि केवल नए लोग ही करते हैं। मैं इस उम्र के बारे में एक वेबपेज में आया था कि मैंने बुकमार्क नहीं किया था, क्षमा करें।

2

हां यह अवरुद्ध होगा और स्क्रिप्ट केवल तभी निष्पादित की जाएगी जब इससे पहले अन्य स्क्रिप्ट लोड हों।

उदा।

<script src='someExternalSite/script1.js'></script> 
<script src='someExternalSite/script2.js'></script> 

अधिकतर ब्राउज़र समानांतर में इन दोनों लिपियों लोड करके चीजों को तेजी लाने के लिए कोशिश करेंगे। यहां तक ​​कि script1.js को script1.js से पहले लोड किया गया है, फिर भी वे लोड नहीं होने तक निष्पादित नहीं होंगे।

मैंने हाल ही में इसके साथ परेशानी में भाग लिया। तो मैं कुछ संबंधित बिंदुओं का विस्तार करता हूं।

document.write() को रोकने के लिए मजबूर करता पार्सर, और स्क्रिप्ट इस तरह से अभी भी क्रमिक रूप से निष्पादित करेंगे डालने (script2.js से पहले script1.js):

document.write('<script src=\'someExternalSite/script1.js\'></script>'); 
    document.write('<script src=\'someExternalSite/script2.js\'></script>'); 

अंत में, आप पूरी तरह से अतुल्यकालिक लोड हो रहा है ऐसा करके प्राप्त कर सकते हैं:

var script1 = document.createElement('script'); 
script1.src = 'script1.js'; 
document.getElementByTagName('body')[0].appendChild(script1);  

var script2 = document.createElement('script'); 
script2.src = 'script2.js'; 
document.getElementByTagName('body')[0].appendChild(script2);  

अंतिम एक, बहुत तेज है के बाद से स्क्रिप्ट समानांतर में पूरी तरह से लोड किए गए हैं, लेकिन वहाँ एक बड़ा पकड़ लिया है। वेबकिट आधारित ब्राउज़र के लिए, ऑर्डर की गारंटी नहीं है, script2.js को script1.js से पहले निष्पादित किया जाएगा यदि इसे पहले लोड किया गया है। यदि आप इसके आसपास काम कर सकते हैं, तो एक जावास्क्रिप्ट फ़ाइल में सभी स्क्रिप्ट्स कहें, तो यह विधि बहुत अच्छी है।

Dynamic script addition should be ordered?

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