2011-07-14 23 views
0

Webページの一部だけがJQuery AJAXを使用してロード/アンロード/リロードされる動的なWebアプリケーションを作成しています。Javascriptを動的にロード/アンロードする

しかし、ユーザーがWebページを完全に更新せずに長時間(数時間)アプリケーションを実行するとどうなるか心配しています。

たとえば、Map、Shop、Fightというモジュールを持つゲームがあります。ページには、先頭に読み込まれるいくつかのモジュールもあります(統計情報とチャットのヘッダーのように)。しかし、すべてのナビゲーションと変更はAJAXを使用して中心部で行われます。のは、ユーザーが次のない、言ってみましょう:

は 地図に行く をお店に行く を戦うために行く をお店に行く地図、ショップのよう ...

地図に行き、自分の別のJavascriptを持って戦います各リクエストでロードされるファイル(主にブラウザのキャッシュから推測されます)、メモリ使用量はどうなりますか?ユーザーがマップからナビゲートするときにマップ変数とイベントハンドラをクリーンアップする必要はありますか?ユーザーがMapに2回目に移動したときに、古いMapスクリプトと競合することはありますか?アンロード時にクリーンアップを行わなければ、ブラウザーはますます多くのRAMを使用し始めるので、最終的にユーザーはページをリロードする必要がありますか?

このような状況に対応する信頼できる手法はありますか?

答えて

3

すべての機能をオブジェクトにバインドすると、必要なときにいつでもすべての機能でオブジェクトを解放できます。例:

function badFunction(a,b,c) { 
    alert("Bad example of function. Can't cleanup this."; 
} 

var gameObject = new Object(); 
gameObject.goodFunction = function (a,b,c) { 
    alert("Good example of a function"); 
} 

//Here the whole gameObject 'module' will be allowed to be garbage collected (hopefully). 
gameObject = null; 
+0

イベントはどのように作成されますか? – r3wt

+0

@ r3wtあなたはイベントを手動で管理する必要があります.JSは、どのイベントを削除する必要があるかを知る方法がありません。それを行う最も簡単な方法の1つは、gameObject.createdEvents = []のような配列を作成し、そこに新しく作成されたイベントをプッシュし、次にすべてのイベントを通過してそれらを登録解除する関数gameObject.cleanup()を定義することです。 – bezmax

関連する問題