1

以下は、パフォーマンスの問題を示す従来のプロジェクトの構造を示すワイヤーフレームです。

ここに画像の説明を入力

すべてのダイアログ (jQuery UI から) を開くと、新しい iframe が作成され、ホームからのすべての js が再ダウンロードされ、すべてのオブジェクトが再インスタンス化されます。jQuery from Home からすべての新しい iframe への参照を作成し、各 iframe分離スコープで作業することはできますか?

例えば:

【ホームスコープ】

$("#some-el").data('foo', 'bar');
console.log($("#some-el").data('foo')); // results bar

【App1の範囲】

//after defined in Home first run
console.log($("#some-el").data('foo')); // results undefined

PS:これはレガシー アーキテクチャであり、すべてのソリューションでこのシナリオを考慮する必要があることに注意してください。

4

2 に答える 2

2

実際、これらすべてが同じ場所にホストされている場合、ブラウザはファイルを複数回ダウンロードすることはありません。むしろ、最初の結果をキャッシュし、2 番目にキャッシュから取得します。iframe は別のコンテキストとして扱われるため、変数やフォームの競合について心配する必要はありません。

同じファイルを 2 回ダウンロードすることが主な関心事であると仮定すると、問題はありません。

別の設計として、iframe コンテンツの代わりに AJAX を使用することもできますが、レガシー アプリを使用していると、実際の JSON/REST 呼び出しが利用できないと、それを行うのがいかに難しいかがわかります。私が行ったことの 1 つは、iframe 内のビューを「部分」に変更し、HTML ヘッドなどを除いて必要な HTML コンテンツのみを返し、$.load() を使用してそれらをロードすることです。ロード後にバインドを実行し、フォーム ID などを注意深く追跡する必要があるため、これは複雑になりますが、実行できます。

于 2013-01-23T15:43:10.907 に答える
2

私は以前にこの状況に遭遇したことがあります。top.functionCall()1 つのアプローチは、実際の定義を含める代わりに関数呼び出しを再ルーティングするだけの iframe に読み込まれる JavaScript を定義することです。次のように、すべての関数が 1 つの名前空間の下にある場合は、非常に簡単になります。

親ウィンドウ js:

var namespace = (function () { 
    // all of your functions are in here as properties of namespace
})();

iframe ウィンドウ js:

var namespace = top.namespace;

これに関する 1 つの問題は、状況依存関数 (windowオブジェクトに依存または操作する関数) が壊れる可能性が高いことです。

于 2013-01-23T15:44:08.663 に答える