मैं पृष्ठ लोड के बाद कुछ तत्वों को गतिशील रूप से <script>
टैग जोड़ रहा हूं। मैं समझता हूं कि स्क्रिप्ट्स को असीमित रूप से लोड किया जाता है, लेकिन क्या मैं उन्हें उनके द्वारा जोड़े गए क्रम में पार्स करने की उम्मीद कर सकता हूं?गतिशील स्क्रिप्ट अतिरिक्त आदेश दिया जाना चाहिए?
मैं फ़ायरफ़ॉक्स में अपेक्षित व्यवहार देख रहा हूं, लेकिन सफारी या क्रोम में नहीं। Chrome डेवलपर टूल और Firebug में दस्तावेज़ को देखते हुए, दोनों निम्नलिखित दिखाने -
<html>
<head>
...
<script type="text/javascript" src="A.js"></script>
<script type="text/javascript" src="B.js"></script>
</head>
...
</html>
हालांकि संसाधन लोड हो रहा है दृश्य को देख, क्रोम, पार्स करने के लिए जो भी पहले सर्वर से दिया जाता है लगता है, जबकि फ़ायरबग हमेशा में उन्हें लोड करता है स्क्रिप्ट टैग को ऑर्डर किया गया था, भले ही बी सर्वर से पहले वापस आ गया हो।
क्या मुझे निर्दिष्ट क्रम में फ़ाइलों को पार्स करने के लिए क्रोम/सफारी की अपेक्षा करनी चाहिए? ओएस एक्स पर क्रोम 5.0.375.29 बीटा का प्रयोग 10.6.3
संपादित करें (10/5/10): जब मैं पार्स कहते हैं, मेरा मतलब है पर अमल - आक्रामक पार्स करने के अनेक लाभ देख सकते हैं - THX rikh
संपादित करें (11/5/10): ठीक है, इसलिए मैंने नीचे juandopazo द्वारा इसके साथ एक परीक्षण रखा। हालांकि मैं जावास्क्रिप्ट के साथ सीधे सिर पर स्क्रिप्ट तत्व जोड़ना
- सहित चीजों का एक संयोजन, जोड़ लिया है। (टेस्ट ए -> डी)
- jquery की append() विधि का उपयोग कर सिर पर स्क्रिप्ट तत्व जोड़ना। (टेस्ट ई -> एच)
- jquery's getScript() विधि के साथ स्क्रिप्ट लोड हो रहा है। (टेस्ट मैं -> एल)
मैं भी 'async' और 'आस्थगित करें' स्क्रिप्ट टैग पर विशेषताओं के सभी संयोजन की कोशिश की।
आप यहाँ परीक्षण का उपयोग कर सकते - http://dyn-script-load.appspot.com/, और स्रोत देखें देखने के लिए कि यह कैसे काम करता है। लोड की गई स्क्रिप्ट बस अपडेट() फ़ंक्शन को कॉल करती हैं।
नोट करने के लिए पहली बात यह है, कि केवल 1 और 3 तरीकों से ऊपर समानांतर में संचालित है - 2 अनुरोध क्रमिक रूप से निष्पादित करता है।
चित्र 1 - - आप यहाँ इस का ग्राफ देख सकते हैं अनुरोध जीवनचक्र का ग्राफ़
Request lifecycle Graph http://dyn-script-load.appspot.com/images/dynScriptGraph.png
यह भी दिलचस्प है कि jQuery संलग्न() दृष्टिकोण भी ब्लॉक getScript() कहता है - आप में से कोई भी देख सकते हैं जब तक सभी संलग्न() कॉल पूर्ण नहीं होते हैं, तब तक निष्पादित होते हैं, और फिर वे सभी समानांतर में चलते हैं। इस पर अंतिम नोट यह है कि jQuery एपेंड() विधि निष्पादित होने के बाद दस्तावेज़ शीर्ष से स्क्रिप्ट टैग को स्पष्ट रूप से हटा देती है। केवल पहली विधि दस्तावेज़ में स्क्रिप्ट टैग छोड़ देती है।
क्रोम परिणाम
परिणाम है कि क्रोम हमेशा की तरह, वापस जाने के लिए परीक्षण की परवाह किए बिना पहले स्क्रिप्ट निष्पादित करता है। इसका मतलब है कि jQuery एपेंड() विधि को छोड़कर सभी परीक्षण 'असफल' हैं।
छवि 2 - क्रोम 5.0.375।29 बीटा परिणाम
Chrome Results http://dyn-script-load.appspot.com/images/chromeDynScript.png
फ़ायरफ़ॉक्स परिणाम
फ़ायरफ़ॉक्स, हालांकि, ऐसा लगता है कि अगर पहली विधि का इस्तेमाल किया जाता है, और async गलत है (यानी सेट नहीं), तो स्क्रिप्ट मज़बूती में निष्पादित करेंगे आदेश।
छवि 3 - एफएफ 3.6.3 परिणाम
FF Results http://dyn-script-load.appspot.com/images/ffDynScript.png
ध्यान दें कि सफारी क्रोम के रूप में एक ही तरीके से, जो समझ में आता है में विभिन्न परिणाम देने के लिए लगता है।
इसके अलावा, मेरे पास केवल धीमी स्क्रिप्ट पर 500 मिलीमीटर देरी है, केवल शुरुआत-> समय समाप्त करने के लिए। क्रोम और सफारी सबकुछ पर असफल होने के लिए आपको दो बार रीफ्रेश करना पड़ सकता है।
ऐसा लगता है कि ऐसा करने के तरीके के बिना, हम समानांतर में डेटा पुनर्प्राप्त करने की क्षमता का लाभ नहीं उठा रहे हैं, और ऐसा कोई कारण नहीं है कि हमें (फ़ायरफ़ॉक्स शो के रूप में) क्यों नहीं करना चाहिए।
मैं क्रोम मुद्दों में एक बग के रूप में इस उठाया गया है रजिस्टर - - http://code.google.com/p/chromium/issues/detail मोटे तौर पर, यहाँ कुछ कोड से पता चलता है कि हम क्या किया है? आईडी = 4610 9 – hawkett