|
|
|
| Выполняется setTimeout('get_gueries()', 15000);
После 5 циклов начинает скакать загрузка процессора и постоянно растет объем занимаемый браузером в оперативе на 1-10 мб за каждый запрос.
Сама функция проверяет наличие новых записей в базе (jquery, ajax) и вставляет в базу, если есть новые записи. Всего 6кб записей максимум за 1 запрос.
setTimeout() так жрет много? | |
|
|
|
|
|
|
|
для: Ильдар
(10.01.2012 в 20:36)
| | Да, не должно бы... скорее всего функция, которая на него повешена, у вас что-то подгружает постоянно и в больших количествах. | |
|
|
|
|
|
|
|
для: Ильдар
(10.01.2012 в 20:36)
| | Дык "чистить" надо.
setTimeout () при его вызове всякий раз создаёт новый объект, помещаемый в оперативную память.
Который надо удалять.
Для чего и существует clearTimeout ()
Пример неправильного использования setTimeout ():
<html>
<head>
<script>
var S = -1;
function myFunc ()
{
document.getElementById ('myDIV').innerHTML = ++S;
setTimeout (myFunc, 1000);
}
onload = myFunc;
</script>
</head>
<body>
<div id="myDIV" style="text-align: center; width: 200px; border: 1px solid red; font-size: 40px; line-height: 80px"></div>
</body>
</html>
|
А теперь то же самое, но правильно, с очисткой оперативной памяти от ненужного мусора:
<html>
<head>
<script>
var S = -1;
function myFunc ()
{
document.getElementById ('myDIV').innerHTML = ++S;
if (self.TMR) clearTimeout (TMR);
TMR = setTimeout (myFunc, 1000);
}
onload = myFunc;
</script>
</head>
<body>
<div id="myDIV" style="text-align: center; width: 200px; border: 1px solid red; font-size: 40px; line-height: 80px"></div>
</body>
</html>
|
| |
|
|
|
|
|
|
|
для: АЯС
(10.01.2012 в 21:14)
| | смотрите у меня как.
function get_gueries(disp) {
var timeID = '';
clearTimeout(timeID);
timeID = setTimeout('get_gueries(\'style="display:none;"\')', 15000);
if (!disp) {disp=''}
var cook_hash = getCookie('hash');
$.getJSON('test.php?get=queries&hash='+cook_hash, function(data){
var hash = data.hash;
setCookie('hash', hash, '');
$(data.queries).each (function (i) {
var query_id = this.query_id;
var date = this.date;
var time = this.time;
var auto = this.auto;
var year = this.year;
var query_body = this.query_body;
var status = this.status;
switch (status) {
case '1':
td_color = 'new-query';
status_name = 'Не обработан';
break
case '2':
td_color = 'replyed-query';
status_name = 'Отвечено';
break
case '3':
td_color = 'ordered-query';
status_name = 'Заказано клиентом';
break
case '4':
td_color = 'denied-query';
status_name = 'Вы отказали';
break
default:
alert(false);
}
if (query_body.length > 2) {
var body_items = [];
$(query_body).each (function (idx) {
body_items[idx] = '<div>'+this.part_name+'</div>';
});
var two_items = body_items;
body_items = body_items.join('');
var body_text = '<div class="no-full"><a href="#">'+two_items[0]+two_items[1]+'</a></div><div class="pop"><div>'+body_items+'</div></div>';
}
else {
var body_items = [];
$(query_body).each (function (idx) {
body_items[idx] = '<div>'+this.part_name+'</div>';
});
body_items = body_items.join('');
var body_text = '<a href="#">'+body_items+'</a>';
}
var trs = '<tr '+disp+' class="'+td_color+'"><td class="table-body first"><div>'+query_id+'</div> <div class="check-id" id="check-id-'+query_id+'"><input type="checkbox" name="query_id[]" value="'+query_id+'"></div></td><td class="table-body second"><div title="22 ноября 2011">'+date+'</div><div class="query-time">'+time+'</div></td> <td class="table-body third">'+auto+'</td><td class="table-body fourth">'+year+'</td><td class="table-body fifth">'+body_text+'</td><td class="table-body sixth">'+status_name+'</td><td class="table-body seventh"><div class="icons"><div class="fav-q"><a href="javascript:void(0);" id="fav-'+query_id+'"> </a><div>В избранное</div></div><div class="del-q"><a href="javascript:void(0);" id="del-'+query_id+'"> </a><div>Удалить</div></div></div> </td><td class="table-body eighth"><a href="javascript:void(0);">Ответить</a></td></tr>';
var t = $("#queries tr:first").after(trs);
$("#queries tr").fadeTo(1000, 1);
});
$.pop();
funct();
});
}
|
вот этот код у меня вставляется в html при каждом запросе.
<tr '+disp+' class="'+td_color+'"><td class="table-body first"><div>'+query_id+'</div> <div class="check-id" id="check-id-'+query_id+'"><input type="checkbox" name="query_id[]" value="'+query_id+'"></div></td><td class="table-body second"><div title="22 ноября 2011">'+date+'</div><div class="query-time">'+time+'</div></td> <td class="table-body third">'+auto+'</td><td class="table-body fourth">'+year+'</td><td class="table-body fifth">'+body_text+'</td><td class="table-body sixth">'+status_name+'</td><td class="table-body seventh"><div class="icons"><div class="fav-q"><a href="javascript:void(0);" id="fav-'+query_id+'"> </a><div>В избранное</div></div><div class="del-q"><a href="javascript:void(0);" id="del-'+query_id+'"> </a><div>Удалить</div></div></div> </td><td class="table-body eighth"><a href="javascript:void(0);">Ответить</a></td></tr>
|
| |
|
|
|