javascript - requestAnimationFrame 垃圾回收

标签 javascript optimization memory-leaks garbage-collection requestanimationframe

我正在使用 Chrome Dev Tools v27 中的时间轴分析以下代码的内存使用情况。

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv='content-type' content='text/html; charset=UTF-8' />
  <title>RAF</title>
</head>
  <body>
    <script type='text/javascript' charset='utf-8'>
      var frame = function() {
        window.webkitRequestAnimationFrame(frame);
      };
      window.webkitRequestAnimationFrame(frame);
    </script>
  </body>
</html>

注意这很简单。但最终我看到一个 dentry 图案出现,表明垃圾收集器正在回收内存。

Chrome Dev Tools Timeline

raf 是否默认创建垃圾对象?有什么办法可以避免这种情况吗?谢谢。

最佳答案

enter image description here

我发现了以下内容: 如果将 RAF 函数更改为两个类似“乒乓球”的函数,就会减少很多垃圾。您无法避免第一个初始的“大 GC”,但之后您只会看到大约 50kb 的次要 GC,而不是 700kb-1mb 的 GC。代码将如下所示:

<script type='text/javascript' charset='utf-8'>
  window.frameA = function() {
    window.webkitRequestAnimationFrame(window.frameB);
  };
  window.frameB = function() {
    window.webkitRequestAnimationFrame(window.frameA);
  };
  window.webkitRequestAnimationFrame(window.frameA);
</script>

我想这是您在 Chrome 中可以做的最好的事情了。 我注意到在 FF 中 gc 间隔或内存几乎没有变化,所以它可能与 chrome 调试相关(有关更多详细信息,请参阅上面链接的 chrome 错误报告)。但是,我注意到在像这样部署 RAF 时我自己的游戏有所改进 - 而且我需要能够在没有人工 GC 的情况下调试它,这在普通用户的机器上不会发生。

关于javascript - requestAnimationFrame 垃圾回收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17382321/

相关文章:

java - 如何故意放弃对象进行垃圾回收。 ( java )

android - AndEngine内存泄漏

javascript - 单击标签使单击单选按钮

javascript - 具有自定义按钮的 HTML5 视频播放器无法在全屏模式下工作

javascript - 无法在joomla中使用Modal关闭弹出窗口

optimization - 给定今天的时间,以 golang 中的分钟数获取 UTC 时间的最佳方式

python - 这个问题可以用动态规划来优化吗?

c - 三个条件排列的最快算法是什么?

ios - 内存泄漏 - NSData 和 NSMutableString

php - Cakephp 表单必须提交两次才能工作