2013-02-22 4 views
8

मैं अपने फेसबुक ऐप में मानक फेसबुक जावास्क्रिप्ट कोड का उपयोग कर रहा हूं, जिसे मैं हेरोोकू पर अपने नमूना ऐप में मिला। मैं वास्तव में इसे समझ नहीं पा रहा हूं, लेकिन सावधान रहकर मैं नमूना ऐप को कुछ बुनियादी चीजों को करने में सक्षम हूं जो मेरे लिए उपयोगी हैं।फेसबुक जावास्क्रिप्ट एसडीके असीमित रूप से क्यों लोड किया गया है?

मेरी समझ यह है कि यह कोड किसी भी तरह से फेसबुक जावास्क्रिप्ट एसडीके लोड करता है। यही है, यह एक जावास्क्रिप्ट कोड फ़ाइल लोड करता है। यह वास्तव में क्या फाइल लोड हो रहा है? मैं इसे लोड क्यों नहीं कर सकता जैसे कि मैं किसी अन्य जावास्क्रिप्ट कोड फ़ाइल को लोड करता हूं? उदाहरण के लिए:

<script type="text/javascript" src="/javascript/jquery-1.7.1.min.js"></script> 

इस अत्यधिक जटिल दृष्टिकोण का नकारात्मक पक्ष यह है कि मैं इसके बारे में सिर या पूंछ नहीं बना सकते है, और क्योंकि मैं इसे समझ में नहीं आता, मैं इसका उपयोग कैसे करें के बारे में कोई अंतर्ज्ञान की है।

यहाँ कोड:

<script type="text/javascript"> 
    window.fbAsyncInit = function() { 
    FB.init({ 
     appId  : '<?php echo AppInfo::appID(); ?>', // App ID 
     channelUrl : '//<?php echo $_SERVER["HTTP_HOST"]; ?>/channel.html', // Channel File 
     status  : true, // check login status 
     cookie  : true, // enable cookies to allow the server to access the session 
     xfbml  : true // parse XFBML 
    }); 

    // Listen to the auth.login which will be called when the user logs in 
    // using the Login button 
    FB.Event.subscribe('auth.login', function(response) { 
     // We want to reload the page now so PHP can read the cookie that the 
     // Javascript SDK sat. But we don't want to use 
     // window.location.reload() because if this is in a canvas there was a 
     // post made to this page and a reload will trigger a message to the 
     // user asking if they want to send data again. 
     window.location = window.location; 
    }); 

    FB.Canvas.setAutoGrow(); 
    }; 

    // Load the SDK Asynchronously 
    (function(d, s, id) { 
    var js, fjs = d.getElementsByTagName(s)[0]; 
    if (d.getElementById(id)) return; 
    js = d.createElement(s); js.id = id; 
    js.src = "//connect.facebook.net/en_US/all.js"; 
    fjs.parentNode.insertBefore(js, fjs); 
    }(document, 'script', 'facebook-jssdk')); 
</script> 

उत्तर

4

यह है क्योंकि यह फेसबुक सर्वर से प्रतिक्रिया के लिए प्रतीक्षा करने की जरूरत नहीं है तेजी से अपनी साइट लोड करता है।

window.fbAsyncInit एक कॉलबैक है और स्क्रिप्ट लोड होने पर निष्पादित होती है। तो जब फेसबुक सर्वर डाउन हो जाता है, तो यह फ़ंक्शन कभी भी कॉल नहीं होता है।

जब एपीआई लोड हो जाती है तो एपीआई की सभी कार्यक्षमता उपलब्ध है। बस दस्तावेज़ों की जांच करें। http://developers.facebook.com/docs/reference/javascript/

उम्मीद है कि यह स्पष्ट करता है।

+4

फेसबुक जावास्क्रिप्ट एसडीके के लिए इस तकनीक का उपयोग करना आवश्यक क्यों है जब इसे किसी अन्य जावास्क्रिप्ट कोड के लिए उपयोग नहीं किया जाता है? –

+1

फेसबुक उन बड़े खिलाड़ियों में से एक है जिनकी लिपि लाखों वेब पृष्ठों में एम्बेड हो गई है, इसलिए उन्हें प्रदर्शन मुद्दों पर अधिक ध्यान देना होगा। और चारों ओर देखकर मुझे लगता है कि आप पाएंगे कि अन्य बड़े खिलाड़ी आमतौर पर अपनी स्क्रिप्ट को असीमित रूप से एम्बेड करने की सलाह देते हैं, f.e. Google, ट्विटर, ... – CBroe

+0

और फेसबुक के मामले में उनके सर्वर कुछ क्षणों में धीमा हो सकते हैं। जब बटन की तरह लोड होता है तो बस ध्यान दें। आमतौर पर थोड़ी देर देरी होती है। – Tom

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