mor*_*les 9 javascript memory garbage-collection
所以,我听说你最近可以用JS做所有花哨的实时游戏.而且我不是初学者,所以我应该尝试一下.用一些碰撞检测写了一些微(不完整)物理引擎,都很甜.虽然有点滞后,但预计GC会中断.所以试图最小化任何分配,直到我无法看到任何应该在游戏循环中分配内存的东西.没有分配=>没有清理我.但这是我得到的:

现在,这根本不是很整洁.所以我尝试以各种方式从游戏循环中删除我的东西.还是SAW.所以,我没有向您展示生成此代码的完整代码:
<html><body><script>
function draw() { console.log(1); }
;(function () {
function main(tFrame) { draw(); window.requestAnimationFrame( main ); }
main();
})();
</script></body></html>
Run Code Online (Sandbox Code Playgroud)
惊人?那么这使用requestAnimationFrame,因为它似乎应该用于平滑性能.起初我尝试设置间隔如下:
<html><body><script>
function draw() { console.log(1); }
window.setInterval(draw, 0);
</script></body></html>
Run Code Online (Sandbox Code Playgroud)
完全一样!
这似乎完全不可接受,但我不知道如何阻止这种SAW.我看了很多关于调试内存和东西的事情,那时我虽然问题出现在我的绘图和更新功能中.但这些到片段,基本上没什么,但它们产生了记忆模式.也许这是我的浏览器?或者它是不可避免的,JS无法实时使用?我想相信网络上的某些人知道我不知道的事情,因为很多人都对JS有奇迹.我在这些片段中做错了什么?
编辑:顺便删除控制台日志没有任何改变,万一有人认为这是问题.
让我们分析一下这段代码:
以下是在JavaScript中创建整数与无所事事的性能:

http://jsperf.com/creating-integers
你是对的.在访问了一个about:blank页面并稍微调整了一下代码后,我得到了一些有趣的数据.
码:
function draw() { 1; }
function main(tFrame) {
draw();
window.requestAnimationFrame( main );
}
main();
Run Code Online (Sandbox Code Playgroud)
数据:

此图表在4.6MB和5.2MB之间波动.实际上并不是那么重要.释放半兆内存非常快.不幸的是,没有办法避免这种情况.我尝试了以下方法:
var j = 1;
function draw() { j; }
Run Code Online (Sandbox Code Playgroud)
虽然收集的垃圾较少; GC还在运行.在这个例子和前面的例子中,我们的代码始终以60fps运行:

故事的道德:伐木很昂贵.它总是昂贵的; 是不是javascript.
| 归档时间: |
|
| 查看次数: |
235 次 |
| 最近记录: |