Постоянное обновление страницы приводит к тому, что Firefox увеличивает потребление памяти в Windows. - PullRequest
1 голос
/ 27 марта 2012

У меня странная ситуация с веб-приложением, которое продолжает загружать память в 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) продолжает расти в 10 мегабайт с каждым вызовом.Несмотря на то, что новые данные заменяют старые на странице, кажется, что Firefox не использует это выделенное пространство в памяти.Оказывается, это полностью загружает память, если страница остается открытой на ночь (на простых компьютерах объемом 4 ГБ).

Это проблема с JavaScript или что-то в Firefox?Можно ли как-нибудь форсировать сборку мусора?спасибо.

РЕДАКТИРОВАТЬ : Эта проблема с памятью не наблюдалась в Google Chrome (13.0.782.112 в Win7).

1 Ответ

1 голос
/ 27 марта 2012

Если ваш аргумент 'data' был создан с помощью ключевого слова 'new' jQuery, вы должны написать этот код:

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

Если удалить переменную данных, возвращается false. Я думаю, что вы ничего не можете сделать.

...