在Firefox中使用window.eval()进行内存泄漏?

时间:2016-09-29 14:54:16

标签: javascript google-chrome firefox memory-leaks microsoft-edge

我有一个简单的测试用例,我调用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函数时有问题。

1 个答案:

答案 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>