ASP.NET マスターページでは、YepNope を使用して、jQuery (ローカル フォールバックを使用して Google CDN から) とサイト内のすべてのページで使用されるいくつかのスクリプトを無条件かつ非同期に読み込みます。MasterPage では、body 終了タグの前 (およびすべてのページで使用されるものをロードする YepNope スクリプトの下) に ContentPlaceHolder を作成しました。これは、個々のページで使用されるスクリプトに使用されます。jQuery はサイトのすべてのページで使用できる必要があるため、jQuery を使用する特定のスクリプトがあるページに個別にロードしないでください。
私が抱えている問題は、jQuery が読み込まれる yepnope スクリプトでコールバックまたは完全な関数を使用できないことです。これは MasterPage にあり、これらはそのページでのみ使用または追加される個々のページ スクリプトであるため、まだ必要ですyepnope (ページ スクリプトの上に表示される) がそれらで使用されている依存関係 (jQuery など) の読み込みを完了するまで、個々のページ スクリプトの実行を遅らせることができます。
2つのオプションを考えることができます-
1- ページで使用されるスクリプトを外部ファイルにし、構文を使用してロードします -
yepnope('/url/to/your/script.js');
また
yepnope({ load: '/url/to/your/script.js' });
他のページでは使用されない数行の JavaScript に対して追加の HTTP リクエストが導入されるため、このアイデアが気に入るかどうかはわかりません。
2- 別の yepnope テスト オブジェクト ブロックに jQuery を再度ロードし、完全な関数でページ スクリプトをラップします (テストなしで complete を呼び出すと、前のスクリプトがロードされる前に関数がすぐに実行されるようです)。
ファイルを 2 回リクエストしましたが、ロードは 1 回だけですか? 多くの要望により、yepnope 1.5+ では、すでに要求されたスクリプトが 2 回目に要求されたときに再実行されないという機能を追加しました。これは、あまり複雑でないサーバー側のテンプレート システムを扱っていて、すべての依存関係が利用可能であることだけを気にしている場合に役立ちます。
このページでは、おそらく Google CDN から同じバージョンの jQuery をロードできます。これは、上記に基づいて、実際には 2 回ロードされることはなく、yepnope テスト オブジェクトの完全な関数から呼び出される無名関数でページ スクリプトをロードします。
プラス面では、これはページが MasterPage からロードされる jQuery に依存しなくなったことを意味しますが、マイナス面は (YepNope がスクリプトを 2 回ロードしないと仮定しても) 複数のバージョンの jQuery をロードすることになります。 MasterPage のバージョンを変更しても、将来ページで同じことが起こることはありません。メンテナンスの観点からは、これは良い考えではないと思います。特に、別の開発者が変更を行うという前提 (常に行う必要があると思います) を考えると、そうではありません。
また、特にエレガントにも見えません。
バランスをとって、ほぼ確実に最初のオプションを使用しますが、非同期読み込みが完了するまでページのスクリプトを遅延または延期する方法があるかどうかを知りたいです。これは、リソースを読み込む YepNope テスト オブジェクトの一部として実行できません。 .
他の開発者はこの問題にどのように取り組んでいますか?