Javascript 在Firefox中使用window.eval()时内存泄漏?
我有一个简单的测试用例,调用Javascript 在Firefox中使用window.eval()时内存泄漏?,javascript,google-chrome,firefox,memory-leaks,microsoft-edge,Javascript,Google Chrome,Firefox,Memory Leaks,Microsoft Edge,我有一个简单的测试用例,调用窗口。evaluate函数 <html> <head></head> <body> <script> function test() { // do something important } setInterval( function() { window.eval(
窗口。evaluate
函数
<html>
<head></head>
<body>
<script>
function test() {
// do something important
}
setInterval(
function() {
window.eval("test();");
},
100
);
</script>
</body>
</html>
Firefox中的堆大小有了巨大的增长-从0.25MB增长到115MB
正如@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在使用
窗口时是否有缺陷。请评估函数。是的,49.0.1中存在内存泄漏。一种不存在内存问题的替代方法是函数
<html>
<head></head>
<body>
<script>
function test() {
// do something important
}
setInterval(
function() {
window.eval("test();");
},
100
);
</script>
</body>
</html>
<html>
<head></head>
<body>
<script>
function test() {
console.log("running test");
}
setInterval(
function() {
(new Function( 'return ' + 'test()' ) )();
},
100
);
</script>
</body>
</html>
功能测试(){
日志(“运行测试”);
}
设定间隔(
函数(){
(新函数('return'+'test()')();
},
100
);
您是否将其与未经eval调用函数进行了对比?不同的浏览器在运行内部函数时使用不同的内存量并不奇怪?记住评估是邪恶的,通常应该避免。@charlietfl是的,检查我更新的问题我可以确认这一点,而且这不仅仅是在一段时间内。。从按钮单击或其他方法调用eval会产生与内存泄漏相同的结果。这对于旧版本的firefox是不正确的,所以它肯定是一个新的bug@adeneo eval并不是邪恶的,它只是被普遍误用。有一个非常古老的bug似乎有非常相似的症状