2013-05-02 3 views
2

Моя серверная мощность процессора при посещении страницы использует 11%/100%, каждая открытая вкладка составляет еще 11%. Вот код для моего JScript:Является ли AJAX занятием моей мощностью процессора?

function ajaxFunction(){ 
    var ajaxRequest; // The variable that makes Ajax possible! 

    try{ 
     // Opera 8.0+, Firefox, Safari 
     ajaxRequest = new XMLHttpRequest(); 
    } catch (e){ 
     // Internet Explorer Browsers 
     try{ 
      ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP"); 
     } catch (e) { 
      try{ 
       ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP"); 
      } catch (e){ 
       // Something went wrong 
       alert("Your browser broke!"); 
       return false; 
      } 
     } 
    } 
    // Create a function that will receive data sent from the server 
    ajaxRequest.onreadystatechange = function(){ 
     if(ajaxRequest.readyState == 4){ 
      var ajaxDisplay = document.getElementById('pop'); 
      ajaxDisplay.innerHTML = "Population: " + ajaxRequest.responseText; 
     } 
    } 
    ajaxRequest.open("GET", "count.php", true); 
    ajaxRequest.send(); 
} 

А вот PHP код:

<?php 
$con = @mysql_connect("31.xx.x.xxx","xxxxxxxx","xxxxxxxxxxxx"); 
if (!$con) 
    { 
    echo('?'); 
    } 
@mysql_select_db("archstud_db", $con); 
$result=mysql_query("SELECT * FROM chars"); 
$num=mysql_num_rows($result); 
$num = $num; 
echo $num; 

@mysql_close($con); 
?> 

Я также использую setInterval() с моей JScript с window.onload началом setinterval функции освежает JScript каждые 6 секунд.

Что такое процессор? Также, как я могу это исправить?

+1

Проверьте 'COUNT (*)' функция MySQL. PS: '$ num = $ num;' o_O – zerkms

+0

Заявление MySQL в сторону, я предполагаю, что проблема, которую вы имеете, связана с setInterval(), возможно? Может быть, вызов функции снова и снова? –

+0

Я запросил его в комментарии к ответу. Можем ли мы увидеть setInterval, пожалуйста? –

ответ

-2

Почему вы все еще используете устаревшую библиотеку (mysql)?

Слышали ли вы об индексах - «ВЫБЕРИТЕ * ОТ ЧАРОВ», возможно, прикручивают вещи.

Почему вы обновляете каждые 6 секунд?

+0

Если кто-то хочет выбрать все из таблицы, то индексы не помогут (по определению). Не ответ. – zerkms

+0

@zerkms - Это испортит производительность –

+1

вы уверены, что полностью понимаете, как работают индексы? Если да, не могли бы вы объяснить, как индексы могли бы помочь с запросом 'SELECT * FROM tbl' (при условии, что человеку нужно извлечь все из таблицы)? – zerkms

-1

Я не верю, что это проблема Ajax, поскольку Ajax происходит на стороне клиента, и, как вы сказали, это перегружен процессор вашего сервера. Прежде всего, проверьте время, которое он берет на MySQL, чтобы запустить этот запрос. Вы сказали, что ваш код Javascript работает с интервалом в 6 секунд, каждое соединение с MySQL и выполнением скриптов PHP потребляет немного процессора, потому что он создает новый поток для каждого выполненного запроса, поэтому, если вы открываете вкладку seccond до того, как предыдущий запрос будет законченный, это второе использование CPU центрального процессора будет добавлено к первому.

1

ОП не вставил важную часть кода, и запросы на его просмотр не увенчались успехом, поэтому я буду подвергать сомнению и подкреплять его разумными объяснениями. Его сервер перегружен - это означает, что, что бы ни случилось, есть что-то, что пинговало сервер в течение нескольких минут. Мы также знаем, что каждая вкладка локально добавляет 11%, что означает, что в браузере что-то делает gianormous количество вещей.

OP изложено о setInterval. Я готов поспорить, что у него есть следующая строка:

setInterval(ajaxFunction, 6); 

Который, он может верить, пинги каждые 6 секунд. Фактически, он пингует каждые шесть миллисекунд, что будет объяснять нагрузку на стороне сервера и на стороне клиента без замораживания страницы.

Быстрый обходной путь заключается в следующем:

setInterval(ajaxFunction, 6000); 
Смежные вопросы