我有一个简单的测试用例,我调用window.evaluate
函数。
<html>
<head></head>
<body>
<script>
function test() {
// do something important
}
setInterval(
function() {
window.eval("test();");
},
100
);
</script>
</body>
</html>
现在,当我在Firefox,Chrome和Edge中打开此页面并分析内存时,我可以看到不同的结果。请注意,我使用的是Windows 10 Pro 64b。
at start after cca 9 hours browser version
-------------------------------------------------
Edge: 0.28MB 0.28MB 38.14393.0.0
Chrome: 1.70MB 1.90MB 53.0.2785.116
Firefox: 0.25MB 115.3MB 49.0.1
Firefox中的堆大小增长 - 从0.25 MB到115 MB 。
正如@charlietfl在这个问题下面的评论中提到的,我也做了相同的测试而没有window.eval
函数。所以我只是在间隔回调中调用test()
。
at start after cca 9 hours browser version
-------------------------------------------------
Edge: 0.27MB 0.27MB 38.14393.0.0
Chrome: 1.60MB 1.60MB 53.0.2785.116
Firefox: 0.19MB 0.19MB 49.0.1
如您所见,任何堆大小都没有改变。
所以我问这个测试javascript代码本身是错误的还是Firefox在使用window.evaluate
函数时有问题。
答案 0 :(得分:0)
是的,存在49.0.1中的内存泄漏。一个没有内存问题的替代方法是Function。
<html>
<head></head>
<body>
<script>
function test() {
console.log("running test");
}
setInterval(
function() {
(new Function( 'return ' + 'test()' ) )();
},
100
);
</script>
</body>
</html>