2017-09-11 1 views
0

私はメモリ管理に関して問題があります。 私の最も単純コードはここにある:JavaScriptクリーンメモリ

var url="/abrapo.php"; 
var ob={start_:100, token:null} 

function post_token(){ 
    $.post(url,{access:ob.token}) 
    .done(function(data){ 
     console.log(data); 
     ob=data; 
    }); 
} 

は、私はすべて秒機能post_tokenを呼び出します。だから2000年のコールユーザーがメモリの問題を抱えていると、RAMは2GBまで上昇する。投稿後にデータを記録し、メモリをクリアしたいだけのものを保存する必要はありません。私はすでにgoogledと削除obを見つける。しかし、それはメモリをきれいにしません。メモリを増やすにはどうすればいいですか?ページをリロードせずにクリーニングするにはどうすればいいですか?

+0

おそらくjavascriptの問題ではなく、PHPの面を見てください。 –

+0

なぜPHPですか?メモリの問題は、ユーザーがサーバーではない、このjsは問題を作る –

+0

https://forum.jquery.com/topic/memory-leaks-with-ajax-calls – Osama

答えて

2

メモリの蓄積先はブラウザのプロファイリングツールを使って判断してください。 Chromeでは、これらのプロファイリングツールは、のパフォーマンスタブのChrome開発ツールF12にあります。

  • プロファイリング実行をしてみましょう
  • クリックスタートプロファイリングとリロードページはCtrl + Shiftキー + E
  • メモリプロファイリングを有効にするには、先頭近くにメモリチェックボックスをクリックしますしばらくの間、ほとんどのページが2〜3秒で読み込まれますが、あなたのページはそれより長く実行する必要があるようです。
  • Cl他のすべてのパフォーマンスグラフの中でプロファイリング

を停止する停止ボタンICK、あなたはこのようになりますメモリ使用量のための1が表示されるはずです。

enter image description here

あなたはどうかを確認するためにこれを使用することができ、ブラウザはJavaScriptのヒープ上にガベージコレクションを実行しているとき、。特定のオブジェクトをnullに設定して手動でクリアする必要がある場合があります。また、循環参照や他の複雑な参照パターンを避けてください。これにより、javascriptエンジンがオブジェクトよりも長く保持する可能性があります。

Click hereブラウザでのメモリ管理とガベージコレクションについて詳しくは、

0

データ取得デバイス用のUIを書く際に同様の問題があり、使用しないときは大容量データ配列を含むすべての変数をnullに設定することで飛行することができました。

ご利用の場合は自分のコードで複製することは容易ではありませんが、私はあなたが

data = null; 

ob = null; 

いつでも使用していないを設定してみてください示唆しています。

あなたは提案を少し微調整が必​​要になる場合があります、トークンのみ割り当てることによって言う:このような場合の

ob.token = data.token; 

をトークンのみこれは、本質的に達成している何

ob.token = null; 

をnullに設定しなければならないであろうそれらを使用する変数が明確にヌルに設定されているため、ガベージコレクタに未使用のオブジェクトをクリアする機会が与えられます。ああ、はい、そしてメモリプロファイリングはあなたの友人が正確に何を見つけたらいいのですか?