スクリプトをページに追加する次の2つの方法の間で、ロード\実行時間に違いはありますか?
<script>
document.write('<script src=someScript.js></script>');
</script>
対これ:
<script>
var s=document.createElement('script');
s.src='someScript.js';
document.body.appendChild(s);
</script>
両方がページの同じ場所(終了bodyタグの前)に追加されていると仮定します。
どんな情報でも大歓迎です!
編集:コメントと回答をありがとうございます。私は実際にロード時間や実行の違いに関する特定の情報を探しています(もしあれば?)。また、DOMがまだ解析されている間に両方を配置できます。これについてのポインタをありがとう!
同じことを研究しているときに私はこれに出くわしました。いくつかのテストの後、はい、これら2つの方法の間にメジャーの違いがあると結論付けました。最近のブラウザでは、これはロード時間や実行時間ではなく、スクリプトが評価される順序に関係します。たとえば、次の場合です。
someScript.js
console.log('2');
index1.htm
<script>
console.log('1');
var script = document.createElement('script');
script.src = 'someScript.js';
document.write(script.outerHTML);
</script>
<script>
console.log('3');
</script>
index2.htm
<script>
console.log('1');
var script = document.createElement('script');
script.src = 'someScript.js';
document.body.appendChild(script);
</script>
<script>
console.log('3');
</script>
コンソールでindex1.htm
を実行すると、シーケンス「1、2、3」が表示されます。 index2.htmlを実行すると、代わりに「1、3、2」というシーケンスが表示されます。要求されている外部スクリプトがある場合、これらは両方のメソッドで動的に要求されたsomeScript
よりも先にロードされます。
注意すべき重要なことは、実行の順序です。ジャックがコメントで述べたように、document.write
の使用は嫌われています。これは、スクリプトがhtmlドキュメントの最後にない場合に当てはまります。これは、スクリプトがWebページのレンダリングをブロックするためです。スクリプトが一番下にある場合でも、これが当てはまるかどうかはわかりません。
それでも、コールバック関数を使用して、JavaScriptの実行で順序を強制することができます。
document.write()
は、実行されるドキュメントに書き込みます。
一方、appendChild
は指定された要素に要素を追加します。