Facebook SDK代码段的变化背后的原因是什么?

时间:2014-11-17 18:16:00

标签: javascript facebook

旧方式:

(function(d){
    var js, id = 'facebook-jssdk'; 
    if (d.getElementById(id)) {return;}
    js = d.createElement('script'); js.id = id; js.async = true;
    js.src = "//connect.facebook.net/en_US/all.js";
    d.getElementsByTagName('head')[0].appendChild(js);
    }(document));

新方式:

(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/sdk.js";
    fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));

如果我们看一下差异,你可以注意到一些变化:

  1. 通过参数添加一些“硬编码”字符串。为什么要付出额外的努力?
  2. 现在,在所有其他脚本标记之前显式添加了脚本元素,而不是仅将其附加到<head>标记。为什么?我可以想象在其他阻塞脚本之前加载它会更快,但是因为他们建议将脚本放在<body>的开头,这意味着它还处理了标题中的所有脚本标记?或者我错过了什么?

1 个答案:

答案 0 :(得分:1)

  1. s和id都在多个地方使用,因此将它们作为变量添加会使代码缩短。
  2. 可能没有头标。总是有一个脚本标记,因为您需要将该代码放在脚本标记中。