0

私はヤフーの例外的なパフォーマンスルールを利用しようとしています:スクリプトの重複を避ける

そのためには、スクリプトをページに挿入する前に、スクリプトが既にページに追加されているかどうかを知りたいと考えています。ページにscriptmanagerを追加しない限り、asp.netコードビハインドに何が追加されたのか理解できないようです。しかし、asp.net AJAX の使用は避けたいと思います。ルールの説明から、それはphpで可能なもののように見えます。

コードビハインドでチェックできないと仮定して、jQuery $.getString 関数の使用を検討していましたが、スクリプトをフェッチする前にチェックしません。JavaScript ファイルを選択した場合、ページにロードされたスクリプトを特定するために、http 応答全体を解析する必要がありますか?

4

4 に答える 4

2

ページが ASP.NET Page.ClientScript Register API を使用してスクリプトを登録している場合は、Page.ClientScript.IsClientScriptIncludeRegistered を使用できます。一方、これらの API を使用している場合は、それぞれの 1 つだけが登録されていることが既に保証されているため、実際に呼び出す必要はありません。

http://msdn.microsoft.com/en/us/library/system.web.ui.clientscriptmanager.isclientscriptincluderegistered.aspx

ページのマークアップに通常の ole スクリプト要素が静的に含まれているだけで、スクリプトがクライアント側に読み込まれているかどうかを検出する必要がある場合は、ページ上のすべてのスクリプト要素を取得し、それらの .src 値を確認する必要があります。これに伴う問題は、一部のブラウザーは、宣言したものだけでなく、その URL を完全なパスに自動的に解決することです。したがって、さまざまな方法でそれを説明できます-必要なスクリプトである文字列の末尾を検索するか、比較するURLを動的に作成されたURLに設定して解決することができますscript 要素 (DOM に追加することはありませんが、解決されます)。

これは私の頭のてっぺんから外れているだけです。何か間違っていたらごめんなさい:

var s = document.createElement("script");
s.src = "foo.js";

var loaded, scripts = document.getElementsByTagName("script");
for (var i = 0; i < scripts.length; i++) {
    if (scripts[i].src === s.src) {
        loaded = true;
        break;
    }
}
if (loaded) {
   // this script is already loaded
   // assuming you dont have multiple copies in different locations
}
于 2009-07-21T06:21:30.790 に答える
1

これを行うためにクライアント側のスクリプトを使用する必要はありません... ASP.NET AJAX を使用する必要なく、ClientScriptManager を使用してコード ビハインドでこれを行うことができます ( ClientScriptManagerScriptManagerを混同していると思います* )コントロール/ページで次を使用するだけです:

ClientScript.RegisterClientScriptInclude("some-script", "myScript.js");

またはユーザーコントロールから:

Page.ClientScript.RegisterClientScriptInclude("some-script", "myScript.js");

これはキー「some-script」を使用し、ページにスクリプトのコピーを 1 つだけ登録します。

*明確にするために、これらの違いから混乱が生じていると思います。

  • ClientScriptManagerクライアント側のスクリプトを管理するために使用されるサーバー側のヘルパー クラスの場合 (つまり、その全体の目的は、実行しようとしていることを正確に実行することです)。これは、Page のClientScriptプロパティを介してアクセスされます。
  • ScriptManagerは、ASP.NET AJAX でクライアント側の Ajax スクリプトを支援するために使用されるコントロールです。

(私は自分自身を混乱させ、最初に間違ったサンプルコードを与えました)

于 2009-07-21T06:32:03.733 に答える
0

これは、複数の Web ユーザー コントロールを使用するマスター ディテール シナリオでは実際には機能しません。

Web ユーザー コントロールが動的である場合、スクリプトの初期化を実行する必要があるユーザーを制御できなくなります。

一度リンクする方が簡単ですが、開発者は ClientManager とスクリプト ロードのどちらを使用するかを検討する必要があります。

于 2009-09-17T13:07:55.977 に答える
-1

ええ、応答全体を解析する必要があります...

javascript ファイルを作成し、そこにすべての JavaScript を配置してから、その JavaScript ファイルをコードにインポートしてみませんか? このようにして、重複したスクリプトの挿入を取り除くことができます。

于 2009-07-21T06:25:35.133 に答える