1

Firefox / Windows でメモリを使い果たし続ける webapp に関して奇妙な状況があります。基本的に、アプリは を介し​​て行われるサーバーへのPOST呼び出しを使用して、ページ内のデータを更新しますjQuery。呼び出しが行われるたびに、Firefox のメモリ消費量は、サーバーから返されるデータのサイズに不釣り合いなほど増加します。

これが私のアプリに固有のものかどうかを確認するために、Sinatra (Ruby 1.9.2-p318) と jQuery (1.7.1) を使用して簡単なテスト アプリを作成しました。アプリは 10 秒ごとにサーバーにリクエストを送信し、1 MB の html チャンクをページにロードします。

サーバ側:

require 'rubygems'
require 'sinatra'
require 'erb'
require 'json'

configure do
  set :static, true
end

post '/' do
  content_type :json

  # a simple html file containing ~ 1MB of data  
  html = File.read( File.join(File.dirname(__FILE__), 'html.txt' ) )

  # convert to JSON and return to the client
  return { "html" => html }.to_json
end

クライアント側:

<!doctype html>
<html>
  <head>
    <script type="text/javascript" src="/js/jquery-1.7.1.min.js"></script>
  </head>
  <body>
    <h1>Test Page</h1>
    <div id="results" style="display: none;"></div>

    <script type="text/javascript">
      $(function(){
        // refresh the data every 10 sec
        setInterval( function(){ doRefresh(); }, 10 * 1000 );
      });

      function doRefresh() {
        $.post('/', function(data){
          $('#results').html( data.html );
          // attempt to free some memory
          delete data;
        }, 'json');
      }
    </script>
  </body>
</html>

変化していないように見えるのは、Firefox プロセスによるメモリ消費 (Windows のタスク マネージャーで観察) が、呼び出しごとに数十メガバイト単位で増加し続けていることです。ページ内の古いデータが新しいデータに置き換わるという事実にもかかわらず、Firefox はメモリ内の割り当てられたスペースを破棄していないようです。ページを一晩開いたままにしておくと (単純な 4GB マシンで)、メモリが完全に使い果たされることがわかります。

これは JavaScript の問題ですか、それとも Firefox の問題ですか? いずれかでガベージコレクションを強制することはできますか? ありがとう。

編集: このメモリの問題は、Google Chrome (Win7 の 13.0.782.112) では観察されませんでした。

4

1 に答える 1

1

「data」引数が jQuery によって「new」キーワードでインスタンス化されている場合は、次のコードを記述する必要があります。

…
$('#results').html( data.html );
delete data;
…

データ変数を削除すると false が返される場合。あなたには何もできないと思います。

于 2012-03-27T10:20:12.410 に答える