私は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がバグかどうかを確認しています。
これをevalなしの関数呼び出しに対してベンチマークしましたか? – charlietfl
内部機能を実行するときにブラウザごとに異なる量のメモリを使用するということはまったく驚きではありませんか? evalは悪であり、一般的に避けるべきであることを忘れないでください。 – adeneo
@charlietflはい私の更新された質問を確認してください – Behnil