1

这个咖啡脚本代码(rails 服务器)导致 midori 使用越来越多的内存,因此显然包含内存泄漏。这导致我的 pi 在几个小时后崩溃。谁能帮我确定泄漏的来源?

jQuery ->
    title = ""
    dir = ""
    window.setInterval ->
         $.get('p_status', (response) ->
              title = jQuery.parseJSON(response.title)
              dir = jQuery.parseJSON(response.dir)
              $("#current_title").html(title)
              $("#main_c").attr("src", dir))
    , 8000

我也尝试了以下代码,但无济于事..:

jQuery ->
    title = ""
    dir = ""
    ref_current_title = $("#current_title")
    ref_main_c = $("#main_c")
    window.setInterval ->
         $.get('p_status', (response) ->
              title = jQuery.parseJSON(response.title)
              dir = jQuery.parseJSON(response.dir)
              ref_current_title.html(title)
              ref_main_c.attr("src", dir))

编辑:为了完整起见,生成的javascript:

(function() {
  jQuery(function() {
  var title, dir, ref_current_title, ref_main_c ;
  title = "";
  dir = "";
  ref_current_title = $("#current_title");
  ref_main_c = $("#main_c");
  return window.setInterval(function() {
   return $.get('p_status', function(response) {
      title = jQuery.parseJSON(response.title);
      dir = jQuery.parseJSON(response.dir);
      ref_current_title.html(title);
      return ref_main_c.attr("src", dir);
   }
  });
}, 8000);
});

}).call(this);
4

1 回答 1

0

rails 服务器和 midori 都在同一个树莓派上。是 midori 进程在积累内存

只是一个理论,但也许您在每次间隔运行时都创建了一个新的匿名函数。而且它没有收集垃圾。

我会尝试在间隔循环之外提取函数,因此它只定义一次:

get_p_status = 
  () -> 
    $.get('p_status', (response) ->
      title = jQuery.parseJSON(response.title)
      dir = jQuery.parseJSON(response.dir)
      $("#current_title").html(title)
      $("#main_c").attr("src", dir)
)


jQuery ->
   title = ""
   dir = ""
   window.setInterval get_p_status, 8000
于 2014-06-16T13:14:09.727 回答