连续页面刷新会导致Firefox增加Windows上的内存消耗

时间:2012-03-27 10:01:25

标签: javascript firefox memory-consumption

我有一个奇怪的情况,一个webapp一直在Firefox / Windows上运行内存。基本上,应用程序使用通过jQuery对服务器进行的 POST 调用来刷新页面中的数据。每次调用时,Firefox的内存消耗量都会增加,与服务器返回的数据大小不成比例。

要查看这是否特定于我的应用程序,我使用Sinatra(Ruby 1.9.2-p318)和jQuery(1.7.1)编写了一个简单的测试应用程序。该应用程序每10秒向服务器发送一个请求,并向页面加载1MB 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'任务管理器观察)在每次调用时持续上升10兆字节。尽管新数据取代了页面中的旧数据,但似乎Firefox并没有在内存中处理分配的空间。事实证明,如果页面在一夜之间保持打开状态(在简单的4GB机器上),这将完全耗尽内存。

这是一个JavaScript问题还是Firefox的问题?我可以以某种方式强制垃圾收集吗?感谢。

编辑:Google Chrome(Win7上的13.0.782.112)未发现此内存问题。

1 个答案:

答案 0 :(得分:1)

如果你的'data'参数已经被jQuery用'new'关键字实例化,你应该编写这段代码:

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

如果删除数据变量,则返回false。我想你什么都做不了。