Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: setTimeout() грузить процессор
 
 автор: Ильдар   (10.01.2012 в 20:36)   письмо автору
 
 

Выполняется setTimeout('get_gueries()', 15000);
После 5 циклов начинает скакать загрузка процессора и постоянно растет объем занимаемый браузером в оперативе на 1-10 мб за каждый запрос.
Сама функция проверяет наличие новых записей в базе (jquery, ajax) и вставляет в базу, если есть новые записи. Всего 6кб записей максимум за 1 запрос.

setTimeout() так жрет много?

  Ответить  
 
 автор: cheops   (10.01.2012 в 20:41)   письмо автору
 
   для: Ильдар   (10.01.2012 в 20:36)
 

Да, не должно бы... скорее всего функция, которая на него повешена, у вас что-то подгружает постоянно и в больших количествах.

  Ответить  
 
 автор: АЯС   (10.01.2012 в 21:14)   письмо автору
 
   для: Ильдар   (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>

  Ответить  
 
 автор: Ильдар   (11.01.2012 в 09:04)   письмо автору
 
   для: АЯС   (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>&nbsp;</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>&nbsp;</td><td class="table-body eighth"><a href="javascript:void(0);">Ответить</a></td></tr>

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования