我正在使用 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(使用前将#替换为@)