У меня странная ситуация с веб-приложением, которое продолжает использовать память в Firefox/Windows. По сути, приложение обновляет данные на странице с помощью вызова POST на сервер через jQuery
. Каждый раз, когда выполняется вызов, потребление памяти Firefox увеличивается на величину, непропорциональную размеру данных, возвращаемых с сервера.
Чтобы проверить, относится ли это к моему приложению, я написал простое тестовое приложение, используя Sinatra (Ruby 1.9.2-p318) и jQuery (1.7.1). Приложение отправляет запрос на сервер каждые 10 секунд и загружает на страницу фрагмент HTML размером 1 МБ:
Сторона сервера:
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 не освобождает это выделенное пространство в памяти. Оказывается, это полностью расходует память, если страница остается открытой на ночь (на простых машинах с 4 ГБ).
Это проблема с javascript или что-то с Firefox? Могу ли я как-то принудительно собрать мусор? Благодарю.
EDIT: эта проблема с памятью не наблюдалась в Google Chrome (13.0.782.112 на Win7).
#results
? - person Supr   schedule 27.03.2012