<script>
ページの読み込み後に、head要素に動的にいくつかのタグを追加しています。スクリプトが非同期で読み込まれることは理解していますが、追加された順序で解析されることを期待できますか?
Firefoxで期待される動作が見られますが、SafariやChromeでは見られません。Chrome開発者ツールとFirebugでドキュメントを見ると、どちらも次のように表示されます-
<html>
<head>
...
<script type="text/javascript" src="A.js"></script>
<script type="text/javascript" src="B.js"></script>
</head>
...
</html>
ただし、リソース読み込みビューを見ると、chromeはサーバーから最初に返された方を解析しているように見えますが、firebugは、Bがサーバーから最初に返された場合でも、スクリプトタグが追加された順序で常にそれらを読み込みます。
Chrome / Safariが指定された順序でファイルを解析することを期待する必要がありますか?OSX10.6.3でChrome5.0.375.29ベータ版を使用する
編集(10/5/10):私が解析と言うとき、私は実行することを意味します-積極的な解析の多くの利点を見ることができます-thx rikh
編集(11/5/10):わかりました。それでは、以下のjuandopazoによるテストをまとめました。しかし、私は以下を含むものの組み合わせを追加しました
- javascriptを使用してスクリプト要素をヘッドに直接追加します。(テストA-> D)
- jqueryのappend()メソッドを使用してスクリプト要素をヘッドに追加します。(テストE-> H)
- jqueryのgetScript()メソッドを使用してスクリプトを「ロード」します。(テストI-> L)
また、スクリプトタグの「async」属性と「defer」属性のすべての組み合わせを試しました。
ここからテストにアクセスできます-http://dyn-script-load.appspot.com/、およびソースを表示して、テストがどのように機能するかを確認します。ロードされたスクリプトは、update()関数を呼び出すだけです。
最初に注意することは、上記の1番目と3番目のメソッドのみが並行して動作することです。2番目はリクエストを順番に実行します。あなたはここでこれのグラフを見ることができます-
画像1-リクエストライフサイクルの
グラフリクエストライフサイクルグラフhttp://dyn-script-load.appspot.com/images/dynScriptGraph.png
jqueryのappend()アプローチがgetScript()呼び出しもブロックすることも興味深いです。すべてのappend()呼び出しが完了するまで実行されないことがわかります。その後、すべてが並行して実行されます。これに関する最後の注意点は、jQueryのappend()メソッドは、スクリプトタグが実行されると、ドキュメントヘッドからスクリプトタグを削除するように見えることです。最初の方法のみがスクリプトタグをドキュメントに残します。
Chromeの結果
その結果、テストに関係なく、Chromeは常に最初に返されるスクリプトを実行します。これは、jQueryのappend()メソッドを除くすべてのテストが「失敗」することを意味します。
画像2-Chrome5.0.375.29ベータ結果
Chromeの結果http://dyn-script-load.appspot.com/images/chromeDynScript.png
Firefoxの結果
ただし、Firefoxでは、最初の方法が使用され、非同期がfalse(つまり設定されていない)の場合、スクリプトは確実に順番に実行されるようです。
画像3-FF3.6.3結果
FF結果http://dyn-script-load.appspot.com/images/ffDynScript.png
SafariはChromeと同じようにさまざまな結果をもたらすように見えることに注意してください。これは、理にかなっています。
また、開始->終了時間を短縮するために、遅いスクリプトでは500ミリ秒の遅延しかありません。ChromeとSafariがすべてで失敗するのを確認するには、数回更新する必要がある場合があります。
これを行う方法がなければ、データを並行して取得する機能を利用していないように思われます。また、(Firefoxが示すように)そうすべきでない理由はありません。