requestAnimationFrame 垃圾回收

2024-06-18

我正在使用 Chrome 开发工具 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>

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

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


我发现了以下情况: 如果将 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 的情况下调试它,而普通用户机器上不会发生这种情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

requestAnimationFrame 垃圾回收 的相关文章

随机推荐