2011-07-12 16 views
0

これら2つの非同期jsロードメソッドの違いは何ですか?これらの非同期読み込みメソッドのどれが最適ですか?ドキュメント書き込み?

<div class="g-plusone"></div> 
<script type="text/javascript"> 
(function(d, t) { 
var g = d.createElement(t), 
s = d.getElementsByTagName(t)[0]; 
g.async = true; 
g.src = 'https://apis.google.com/js/plusone.js'; 
s.parentNode.insertBefore(g, s); 
})(document, 'script'); 
</script> 

<script type="text/javascript"> 
//<![CDATA[ 
(function() { 
    document.write('<fb:like href="http://www.sandrophoto.com/' + location.pathname + '" send="true" width="360" show_faces="false" font=""></fb:like>'); 
    var s = document.createElement('SCRIPT'), s1 = document.getElementsByTagName('SCRIPT')[0]; 
    s.type = 'text/javascript'; 
    s.async = true; 
    s.src = 'http://connect.facebook.net/en_US/all.js#xfbml=1'; 
    s1.parentNode.insertBefore(s, s1); 
})(); 
//]]> 
</script> 

答えて

0

これらの2つの外観は、概念的にはローディングが似ています。両方とも新しいスクリプトタグを作成し、それをDOMに追加することで、提示された順序でロードする必要がある他のスクリプトタグに依存せずに非同期にロードすることができます。これらの実装には若干の違いがありますが、読み込みの観点からは概念的に同じです。

FBコードのdocument.write()は、他の読み込みイベントとのシリアル化を引き起こし、状況によっては若干遅くなる可能性があります。

+0

あなたの提案にしたがって、私はdocument.writeを削除し、div内にdivを直接書き込むことに決めました。コードの残りの部分については、私はオプション#1に行って、私には少ないコード:) –

0

最も明白な違いは、document.writeをアプローチは、他の方法は、指定されたコンテナのdivにコンテンツを配置し、前記それは、置かれています正確にドキュメントにコードを書き込みますということです。

他にもいくつかの違いがあります。スクリプトを非同期で読み込む方法もあります。

スティーブ・サウダーズは、このトピックに関する優れた記事であるhttp://www.stevesouders.com/blog/2009/04/27/loading-scripts-without-blocking/を読んでお勧めします。

+0

しかし、document.write()はスクリプトタグの読み込みとは何の関係もありません。これは単なるFBタグ(スクリプト自体が後で使用するかもしれません)です。 document.write()はスクリプトの読み込みにとって重要だと思いますか? – jfriend00

+0

ああ、あなたはかなり正しいです。この場合の書き込みは実際にスクリプトの読み込みには影響しません。おそらく、ページに手動でタグを挿入するか、まったく同じ効果を達成するものを挿入するだけです。 –

関連する問題