अपने नमूने के अनुसार,
<html>
<head>
<script src="jquery.js" type="text/javascript"></script>
<script src="abc.js" type="text/javascript">
</script>
<link rel="stylesheets" type="text/css" href="abc.css"></link>
<style>h2{font-wight:bold;}</style>
<script>
$(document).ready(function(){
$("#img").attr("src", "kkk.png");
});
</script>
</head>
<body>
<img id="img" src="abc.jpg" style="width:400px;height:300px;"/>
<script src="kkk.js" type="text/javascript"></script>
</body>
</html>
मोटे तौर पर निष्पादन प्रवाह इस प्रकार है:
- HTML डॉक्यूमेंट डाउनलोड हो जाता है
- HTML डॉक्यूमेंट की पार्सिंग शुरू होती है
- HTML पार्सिंग पहुँचता है
<script src="jquery.js" ...
jquery.js
डाउनलोड और पार्स किया गया है
- HTML पार्सिंग पहुँचता है
<script src="abc.js" ...
abc.js
डाउनलोड, पार्स और रन किया जाता है
- HTML पार्सिंग पहुँचता है
<link href="abc.css" ...
abc.css
डाउनलोड और पार्स किया गया है
- HTML पार्सिंग पहुँचता है
<style>...</style>
- आंतरिक सीएसएस नियमों को पार्स और परिभाषित किया गया है
- HTML पार्सिंग पहुँचता है
<script>...</script>
- आंतरिक जावास्क्रिप्ट को पार्स और चलाया जाता है
- HTML पार्सिंग पहुँचता है
<img src="abc.jpg" ...
abc.jpg
डाउनलोड और प्रदर्शित किया जाता है
- HTML पार्सिंग पहुँचता है
<script src="kkk.js" ...
kkk.js
डाउनलोड, पार्स और रन किया जाता है
- HTML डॉक्यूमेंट की पार्सिंग समाप्त होती है
ध्यान दें कि डाउनलोड ब्राउज़र के व्यवहार के कारण अतुल्यकालिक और गैर-अवरुद्ध हो सकता है। उदाहरण के लिए, फ़ायरफ़ॉक्स में यह सेटिंग है जो प्रति डोमेन एक साथ अनुरोधों की संख्या को सीमित करती है।
यह भी निर्भर करता है कि घटक पहले से ही कैश किया गया है या नहीं, घटक निकट भविष्य के अनुरोध में फिर से अनुरोध नहीं किया जा सकता है। यदि घटक को कैश किया गया है, तो घटक वास्तविक URL के बजाय कैश से लोड किया जाएगा।
जब पार्सिंग समाप्त हो जाती है और दस्तावेज़ तैयार और लोड हो जाता है, तो घटनाओं onload
को निकाल दिया जाता है। इस प्रकार जब onload
निकाल दिया जाता है, $("#img").attr("src","kkk.png");
चलाया जाता है। इसलिए:
- दस्तावेज़ तैयार है, ऑनलोड को निकाल दिया गया है।
- जावास्क्रिप्ट निष्पादन हिट
$("#img").attr("src", "kkk.png");
kkk.png
डाउनलोड और में लोड होता है #img
$(document).ready()
घटना वास्तव में गतिविधि सक्रिय जब सभी पेज घटक लोड और तैयार कर रहे हैं। इसके बारे में और पढ़ें: http://docs.jquery.com/Tutorials:Introducing_$ (दस्तावेज) पहले से ही!)।
संपादित करें - यह भाग समानांतर या नहीं भाग पर अधिक विस्तृत करता है:
डिफ़ॉल्ट रूप से, और मेरी वर्तमान समझ से, ब्राउज़र आमतौर पर प्रत्येक पृष्ठ को 3 तरीकों से चलाता है: HTML पार्सर, जावास्क्रिप्ट / डोम, और सीएसएस।
HTML पार्सर मार्कअप भाषा की पार्सिंग और व्याख्या करने के लिए जिम्मेदार है और इस प्रकार अन्य 2 घटकों को कॉल करने में सक्षम होना चाहिए।
उदाहरण के लिए जब पार्सर इस रेखा के पार आता है:
<a href="#" onclick="alert('test');return false;" style="font-weight:bold">a hypertext link</a>
पार्सर 3 कॉल करेगा, दो जावास्क्रिप्ट और एक सीएसएस को। सबसे पहले, पार्सर इस तत्व को बनाएगा और इसे इस तत्व से संबंधित सभी विशेषताओं के साथ, DOM नामस्थान में पंजीकृत करेगा। दूसरे, पार्सर इस विशेष तत्व को ऑनक्लिक ईवेंट को बांधने के लिए कॉल करेगा। अंत में, यह सीएसएस शैली को इस विशेष तत्व पर लागू करने के लिए सीएसएस धागे पर एक और कॉल करेगा।
निष्पादन ऊपर नीचे है और एकल थ्रेडेड है। जावास्क्रिप्ट बहु-थ्रेडेड लग सकता है, लेकिन तथ्य यह है कि जावास्क्रिप्ट सिंगल थ्रेडेड है। यही कारण है कि बाहरी जावास्क्रिप्ट फ़ाइल लोड करते समय, मुख्य HTML पृष्ठ के पार्सिंग को निलंबित कर दिया जाता है।
हालाँकि, CSS फाइलें एक साथ डाउनलोड की जा सकती हैं क्योंकि CSS नियम हमेशा लागू किए जा रहे हैं - कहने का अर्थ यह है कि तत्व हमेशा नए सिरे से परिभाषित CSS नियमों से निरस्त हो जाते हैं - इस प्रकार यह अनब्लॉकिंग बना देता है।
एक तत्व केवल DOM में उपलब्ध होगा जब इसे पार्स किया गया है। इस प्रकार जब किसी विशिष्ट तत्व के साथ काम किया जाता है, तो स्क्रिप्ट को हमेशा विंडो ऑनलोड घटना के बाद या उसके बाद रखा जाता है।
इस तरह स्क्रिप्ट त्रुटि का कारण होगा (jQuery पर):
<script type="text/javascript">/* <![CDATA[ */
alert($("#mydiv").html());
/* ]]> */</script>
<div id="mydiv">Hello World</div>
क्योंकि जब स्क्रिप्ट को पार्स किया जाता है, तब #mydiv
भी तत्व को परिभाषित नहीं किया जाता है। इसके बजाय यह काम करेगा:
<div id="mydiv">Hello World</div>
<script type="text/javascript">/* <![CDATA[ */
alert($("#mydiv").html());
/* ]]> */</script>
या
<script type="text/javascript">/* <![CDATA[ */
$(window).ready(function(){
alert($("#mydiv").html());
});
/* ]]> */</script>
<div id="mydiv">Hello World</div>