Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Firefox中使用window.eval()时内存泄漏?_Javascript_Google Chrome_Firefox_Memory Leaks_Microsoft Edge - Fatal编程技术网

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似乎有非常相似的症状