メモリ リークと関数 $.getJSON および $.each ループに関する質問があります。定期的に更新される外部 JSON ファイルからデータを取得しています。2 つの関数を使用して JSON ファイルからデータを反復処理し、別の関数を使用して 5 つの順序付けられていないリストを使用してページに表示します。また、これらの反復を一時停止する関数を使用します。問題は、このスクリプトが大量のメモリと CPU リソースを消費することです。私の理解では、関数 .remove() はオブジェクトをメモリから削除するのではなく、DOM 構造から削除するだけです。ページに 5 つの UL を出力した後にメモリをクリーンアップし、メモリ リークを防ぐにはどうすればよいですか? また、私の一時停止機能はアニメーションを停止しますが、何らかの理由で.eachループを停止せず、メモリ消費の問題も引き起こします.Eachループを一時停止する方法はありますか? これは私のスクリプトです:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="content-type" content="text/html" />
<meta name="author" content="Viacheslav" />
<script src="js/jquery-1.7.1.min.js"></script>
<title>JSON TEST-1</title>
</head>
<body>
<div id="content_div">
<ul></ul>
</div>
<input type=button value="pause/play" onclick="continue_reporting = ( continue_reporting == 1 ) ? 0 : 1;">
<script type="text/javascript">
var counter = 0;
var delay_entry = 0;
delay_fetch = 0;
var continue_reporting = 1;
var node_list = new Array( );
//var content_div = $("#content_div");
var child = 0;
fetch_data(); // initial run
function fetch_data()
{
$.getJSON('js/list.json?i=' + Math.random(), function(data){
//console.log("data.length: " + data.length );
$.each(data, function(key,value){
counter++
setTimeout( pusher, 1000 * delay_entry, value );
delay_entry++;
})
})
setTimeout( fetch_data, 1000 * delay_fetch );
delay_fetch++;
}
function pusher( value )
{
if ( continue_reporting == 1 )
{
$("#content_div").append("<ul>" +
"<li>" + value.reg + "</li>" +
"<li>" + value.bids[0].ind + "</li>" +
"<li>" + value.bids[0].v + "</li>" +
"</ul>");
child++;
if (child > 4){
$("#content_div ul:first-child").remove();
}
}
console.log("children = " + child);
}
</script>
</body>
</html>