2

私はwindow.evaluate関数を呼び出す簡単なテストケースを持っています。Firefoxでwindow.eval()を使用してメモリリークが発生しましたか?

<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で巨大なヒープサイズの成長がある - 115メガバイトへ0.25から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 

ご覧のとおり、ヒープサイズはまったく変更されませんでした。

window.evaluate機能を使用しているときに、このテスト用のJavaScriptコードが単独で間違っているか、Firefoxがバグかどうかを確認しています。

+1

これをevalなしの関数呼び出しに対してベンチマークしましたか? – charlietfl

+1

内部機能を実行するときにブラウザごとに異なる量のメモリを使用するということはまったく驚きではありませんか? evalは悪であり、一般的に避けるべきであることを忘れないでください。 – adeneo

+0

@charlietflはい私の更新された質問を確認してください – Behnil

答えて

0

そうです、49.0.1でのメモリリークが存在します。メモリの問題なしで動作する代替の方法は機能です。

<html> 
<head></head> 
<body> 
    <script> 
     function test() { 
      console.log("running test"); 
     } 
     setInterval(
      function() { 
       (new Function('return ' + 'test()'))(); 
      }, 
      100 
     ); 
    </script> 
</body> 
</html> 
+0

非常に似たような症状を示す非常に古いバグがあります https://bugzilla.mozilla.org/show_bug.cgi?id=468791 – Behnil

関連する問題