0

現在、さまざまなプロセス (請求、注文、ユーザー管理、レポート、サブスクリプション管理、記事管理、倉庫管理など) を管理するために、PHP と JavaScript で書かれた広範な Web ベースのオフィス アプリケーションがあります。

アプリケーションは iframe を使用して、メイン アプリケーション インターフェイス内でさまざまな機能を実行するページを読み込みます。必要に応じて開いているすべてのページにアクセスできるように、メイン ページからタブが作成されます。各ページには、複雑なタスクを実行するための独自の javascript インクルード ファイル、css などがあります。すべての iframe ページ (約 600) は同じドメイン/ホストにあります。

多くの人が iframe の使用を「悪」と表現しているため、アプリケーションを div のみを使用するように変換する方法を検討していました。

私が持っている質問は次のとおりです。

1) iframe がなくなった場合、メインの開始ページにすべての使用されている JavaScript ファイルを含める必要がありますか? または、アクセスするページに応じて javascript ファイルをメモリに動的にロードすることは可能ですか? (新しい関数宣言などを含む)

2) 誰かがページを閉じたときに、これらのインクルード ファイルをメモリから完全に削除できますか? (この場合は div)。これは、異なるファイルの関数名と変数の間で起こりうる競合を回避し、ブラウザのメモリ使用量に負担をかけないようにするためです。

3) それとも、結局 iframe はそれほど「悪」ではないのでしょうか。これは iframe を使用する正しい方法ですか?

アドバイスをありがとう

チーズパトリック

4

2 に答える 2

0

JavaScript がモジュール式である限り、いつでもアンロードできます。

ご存じないかもしれませんが、Javascript では関数はオブジェクトです。オブジェクトを使用すると、次のことができます。

var a = {b:10, c:20, d:30}; //Some memory is allocated for object a
a = null; //Object a will be deleted, and no longer need any memory

それをどのように使用して関数を処理できますか? これが最も簡単な説明です:

var myFunction = function(a,b,c) {
    alert(a+b+c);
}; //Here we have a function stored in memory
myFunction = null; //And now we don't

この方法で関数のライブラリ全体を作成し、1 回の操作でそれらを削除できます。例:

var MyMath = {};
MyMath.abs = function(a) {
    return (a<0)?-a:a;
};
MyMath.min = function(a,b) {
    return a>b?b:a;
}; //MyMath uses some memory.
alert(MyMath.min(5,10));
MyMath = null; //Now it does not

そのため、すべてのライブラリをオブジェクトにラップし、必要なときにいつでもそれらのオブジェクトをアンロードしてください。

追加した:

ブラウザが新しい Javascript コードを検出すると、すべてを一度に実行します。また、メモリに保存しますが、再度使用することはありません (基本的には に保存されるのと同じ方法helloで保存され<div>hello</div>ます)。したがって、最善の解決策は次のとおりです。

1) タグを動的に追加<script>して、必要な Javascript ファイルをオンデマンドでロードします。次のようになります。

if (MyMathLibrary == null || MyMathLibrary == undefined) {
    createScriptElementForMathLibrary();
}

alert(MyMathLibrary.calculateEnthropyOfTheUniverse());

2)ライブラリが不要になったときはいつでもMyMathLibrary = null. この時点でDOMから削除することもできます。私が言ったように、害はありません。この時点では目に見えないdivにすぎません。

しかし、正直なところ、これは面倒な価値があると思いますか? 最近では、3D シューティング ゲームは純粋に Javascript で作成され、コンピューターには 4 ~ 16 GB のメモリが搭載されています。また、最初に動作するプログラムを作成し、遅延が発生した場合にのみ最適化を行うのが一般的です。そうしないと、ユーザーが気付かないような作業に 1 か月を費やしてしまう可能性があります。

于 2013-05-08T11:10:33.543 に答える
0

コードを試しましたか、それとも尋ねましたか?

jqueryを使用できます(こちらを参照

$.getScript("ajax/test.js", function(data, textStatus, jqxhr) {
   console.log(data); //data returned
   console.log(textStatus); //success
   console.log(jqxhr.status); //200
   console.log('Load was performed.');
});
于 2013-05-08T10:27:05.877 に答える