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) では観察されませんでした。