我正在使用 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 图案出现,表明垃圾收集器正在回收内存。
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 的情况下调试它,这在普通用户的机器上不会发生。
关于javascript - requestAnimationFrame 垃圾回收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17382321/