2013-05-08 14 views
7

मैं एक निश्चित अनाम विक्रेता के दस्तावेज में इस कोड को नमूना देखने =। ऐसा लगता है कि एक स्क्रिप्ट को असीमित रूप से लोड करना प्रतीत होता है, उसके बाद उसके बाद से एक फ़ंक्शन का आह्वान करें। मुझे एहसास है कि अगर अपरिभाषित चेक एक अति त्रुटि को रोक देगा, लेकिन क्या यह पूरी तरह से गलत नहीं है?जावास्क्रिप्ट Async सच गुण

मुझे विश्वास है कि IE8/9 में यह ठीक से काम करेंगे लेकिन LOADER_URL स्क्रिप्ट लोड जब तक ब्लॉक निष्पादन और कार्यान्वित; और मैं कई अन्य ब्राउज़रों में विश्वास करता हूं जो एसिंक एट्रब्यूट का समर्थन करते हैं, इसके परिणामस्वरूप इनलाइन ब्लॉक को केवल उस समय के ब्लॉक को if-block के अंदर कोड निष्पादित किया जाएगा। दस्तावेज़ीकरण में कहा गया है कि "टैग असीमित हैं और आपके पृष्ठों की लोडिंग को धीमा नहीं करते हैं।"

<script type="text/javascript" src="LOADER_URL" async="true"></script> 
<script type="text/javascript"> 
if (typeof (OBJECT_DEFINED_IN_LOADER_URL) != "undefined") { OBJECT_DEFINED_IN_LOADER_URL.Load(false); } 
</script> 

अपनी दस्तावेज़ीकरण के पिछले संस्करण को देखते हुए, यह async विशेषता का सुझाव नहीं था और इस दावे नहीं किया। क्या कुछ तकनीकी लेखक गलती करते हैं और कहते हैं कि "हाँ, यह काम करेगा" सभी ब्राउज़रों में पर्याप्त परीक्षण किए बिना? आईई < = 9 में यह हर समय काम करेगा। और async कोड के बाद से डिबग करने के लिए uber-मज़ा ... शायद यह उनके लिए काम किया ...

मेरी संदेह :) है कि

+0

किसी भी कोड आप साझा करना चाहते हैं:

मैं बाहरी स्क्रिप्ट कॉल करने के लिए अब तक किसी भी ब्राउज़रों में इस कोड के साथ अपनी साइट पर कोई समस्या नहीं पाया? –

+2

क्षमा करें मैं lts और gts से बचने के लिए भूल गया और गुस्से में डेटा-भागने राक्षसों मेरे टैग खा लिया। –

+0

@ जैमी सिरोविच, आपको केवल 4 रिक्त स्थान से कोड इंडेंट करना चाहिए, और सभी वर्ण स्वचालित रूप से बच जाएंगे। मैंने अभी आपके लिए इसे ठीक कर दिया है। – Dogbert

उत्तर

3

"Async = सच", जब ब्राउज़र द्वारा समर्थित, मूल रूप से इसका अर्थ है: ब्राउज़र होगा लोड स्क्रिप्ट एसिंक्रोनस और इसे पसंद करते समय निष्पादित करेगा।
इसलिए कोई गारंटी नहीं है कि दूसरी स्क्रिप्ट पहले के बाद निष्पादित की जाएगी।

आप सुरक्षित रूप से "asynch जेएस लोड" का उपयोग कर सकते हैं, यदि आपके पास पृष्ठ में, कोई अन्य कोड सीधे एसिंक स्क्रिप्ट में लोड हो रहे ऑब्जेक्ट्स का उपयोग करके नहीं है।

मैं क्योंकि मैं अपने प्रोजेक्ट में से एक में एक ऐसी ही भूल हो गई है, सभी से इसका प्रमाण है, लेकिन यह Fiddler या कुछ इसी तरह के माध्यम से दोहराने के लिए आसान नहीं होगा।

तो कोड प्रश्न में प्रस्तावित कुछ समय काम हाँ, कुछ समय नहीं होंगे।

+0

async = सत्य मान्य वाक्यविन्यास नहीं है। IE10 और उसके बाद इसे सक्षम करने के लिए बस async का उपयोग करें। स्रोत: http://www.w3.org/html/wg/drafts/html/master/scripting-1.html – user1491819

+0

@ user1491819 पृष्ठ यहां स्थानांतरित हो गया है http://w3c.github.io/html-reference/ script.html - सही सिंटैक्स कोई 'async' विशेषता नहीं है,' async' स्वयं (HTML), या 'async =" async "' (HTML और XML) है। एचटीएमएल में अधिकांश बुलीयन गुण काम करते हैं। दुर्भाग्यपूर्ण है कि कुछ लोग ऐसे गुण प्रस्तुत करते हैं जो सत्य या गलत स्वीकार करते हैं। यह पूरी बात उलझन में डाल देता है। –

7

आप संदिग्ध होने के लिए सही थे। पोस्ट कोड को एसिंक विशेषता का समर्थन करने वाले ब्राउज़र में लक्षित के रूप में काम नहीं करने की काफी गारंटी है।

  1. तो async विशेषता मौजूद है, तो स्क्रिप्ट एसिंक्रोनस तरीके से जैसे ही यह उपलब्ध है निष्पादित किया जाएगा:

    असल में वहाँ 3 "मोड" कर रहे हैं।

  2. यदि एसिंक विशेषता मौजूद नहीं है लेकिन डिफॉल्ट विशेषता मौजूद है, तो पृष्ठ को पार्सिंग समाप्त होने पर स्क्रिप्ट निष्पादित की जाती है।
  3. यदि न तो विशेषता मौजूद है, तो उपयोगकर्ता एजेंट पृष्ठ को पार्स करना जारी रखने से पहले, स्क्रिप्ट तुरंत प्राप्त की जाती है और निष्पादित की जाती है।

स्रोत: http://www.w3.org/html/wg/drafts/html/master/scripting-1.html

नोट: async विशेषता मान अनदेखा किया जाता है, विशेषता के मात्र उपस्थिति का संकेत है कि स्क्रिप्ट अतुल्यकालिक रूप से निष्पादित किया जाना चाहिए। तो मूल्य को गलत पर सेट करना अभी भी सत्य के रूप में सेट जैसा ही होगा।

2

अगर async सच है

स्क्रिप्ट डाउनलोड किया जाएगा और executeed जल्द से जल्द और HTML पृष्ठ async के मामले में एक साथ

को पार्स किया जाएगा झूठी

प्रक्रिया है किसी भी एचटीएमएल पेज पार्सिंग शुरू करने से पहले स्क्रिप्ट डाउनलोडिंग और निष्पादन किया जाएगा इसलिए एचटीएमएल पिसिंग बंद हो जाएगी जबकि स्क्रिप्ट डाउनलोड और पहले निष्पादित की जाएगी।

0

चाहे यह समझ में आता है कोड की संरचना पर निर्भर करता है।

आपको यह ध्यान रखना होगा कि ब्राउज़र कुछ फ़ाइलों को कैश करता है (और इसमें स्क्रिप्ट शामिल हैं)। आपकी स्क्रिप्ट कुछ प्रकार की लाइब्रेरी प्रतीत होती है जो मांग पर आवश्यक संसाधन लोड करती है (शायद require.js जैसी कुछ चीज़), इसलिए इस एसिंक कोड को सही समझ हो सकती है, यदि ब्राउज़र में कैश में सबकुछ है (= ऑब्जेक्ट पहले से मौजूद है) बस बाधित करने के लिए लोडिंग प्रक्रिया।

0

के रूप में वर्णित here, यह एचटीएमएल 5 में नई है: के रूप में अपने मूल्य को निर्दिष्ट करता है async विशेषता 'async' द्वारा आवंटित है कि स्क्रिप्ट कि अतुल्यकालिक रूप से (केवल बाहरी स्क्रिप्ट के लिए) निष्पादित किया जाता है।

function include(src, attr, value) 
{ 
    var head = document.getElementsByTagName('head')[0]; 
    var script = document.createElement('script'); 
    script.type = 'text/javascript'; 
    script.setAttribute(attr, value); 
    script.async = 'async'; 
    script.src = src; 
    head.appendChild(script); 
} 

include('LOADER_URL', 'custom-attr', 'custom-value'); 
संबंधित मुद्दे