为什么Facebook Javascript SDK异步加载?

问题描述:

我在我的Facebook应用程序中使用了标准的Facebook Javascript代码,这是我在Heroku的示例应用程序中获得的。我不太了解它,但通过小心,我已经能够修改示例应用程序来完成对我有用的一些基本事项。为什么Facebook Javascript SDK异步加载?

我的理解是,这段代码以某种方式加载了Facebook Javascript SDK。也就是说,它会加载一个javascript代码文件。它真的加载了什么文件?为什么我不能像加载任何其他JavaScript代码文件一样加载它?例如:

<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> 

它使你的网站加载速度更快,因为它不需要等待来自Facebook服务器的响应。

window.fbAsyncInit是一个回调函数,并在脚本加载时执行。 所以当facebook服务器关闭时,这个函数永远不会被调用。

当加载api时,API的所有功能都可用。只需检查文档。 http://developers.facebook.com/docs/reference/javascript/

希望澄清。

+4

为什么有必要在Facebook Javascript SDK中使用这种技术,当它几乎不用于任何其他Javascript代码? – 2013-02-22 12:23:17

+1

Facebook是脚本嵌入到数百万个网页中的大玩家之一,因此他们必须更多关注性能问题。环顾四周,我想你会发现其他大玩家通常也会推荐嵌入他们的脚本,f.e.谷歌,Twitter,... – CBroe 2013-02-22 13:32:01

+0

而在Facebook的情况下,他们的服务器在某些时刻可能会变慢。只需加载一个按钮时请注意。通常会有轻微的延迟。 – Tom 2013-02-22 15:57:11