У меня есть PHP-код, который извлекает текст из базы данных и показывает его в div как ссылки. Я обновляю DIV каждые 3000 миллисекунд, а использование процессора на несколько процентов выше на самом обновлении. После 20-25 минут постоянных обновлений, когда я нажимаю на одну из ссылок, для открытия этой страницы требуется около 20 секунд, а между тем вкладка браузера замерзает. Появляется больше обновлений - больше времени, необходимого для открытия ссылки, а также при открытии большего количества ссылок (при открытии 10-15 ссылок он становится медленнее, чем 10-12 секунд, чтобы открыть следующую страницу). Когда браузер пытается открыть ссылку, 1 поток процессора полностью загружен. Вот код (упрощенный):высокая загрузка процессора после JavaScript setInterval
<div id="map1"></div>
<script src="http://code.jquery.com/jquery-2.0.3.min.js"></script>
<div id="map1">
<?PHP
if (isset($_GET['m'])) {
$selectback = "SELECT parentid FROM MAP_LINK WHERE sysid = " . $_GET['m'];
................
$rowb = ibase_fetch_row($query);
echo "<h6><a href=\"#\" id=\"back" . $rowb[0] . "\">BACK</a></h6><h4>
<script>
$('a#back" . $rowb[0] . "').click(function() {
clearInterval(auto_refresh);
$(\"#map1\").load(\"test2.php?m=" . $rowb[0] . "\");
auto_refresh = setInterval(function(){
$(\"#map1\").load(\"test2.php?m=" . $rowb[0] . "\");}, 3000);
});
</script>";
$select = "SELECT sysid FROM MAP_LINK WHERE parentid = " . $_GET['m'];
.........................................
$x = 0;
while ($x < $total_rows) {
$x++;
$row = ibase_fetch_row($query);
echo "<br><a href=\"#\" id=\"" . $row[0] . "\">Link # " . $row[0] . "</a>
<script>
$('a#" . $row[0] . "').click(function() {
clearInterval(auto_refresh);
$(\"#map1\").load(\"test2.php?m=" . $row[0] . "\");
auto_refresh = setInterval(function(){
$(\"#map1\").load(\"test2.php?m=" . $row[0] . "\");}, 3000);
});
</script>";
}
} else {
echo "<script>
$(document).ready(function(){
$(\"#map1\").load('test2.php?m=56');
auto_refresh = setInterval(function(){
$(\"#map1\").load(\"test2.php?m=56\");}, 3000);
});</script>";
}
?>
Это примерно тот же код, который у меня есть. База данных состоит из 4 таблиц, из которых извлекаются данные. Первые 6-7 щелчков мгновенно открывают следующую страницу без задержки, задержки начинаются после 10-го щелчка и становятся больше с каждым дополнительным щелчком или обновлением.
Мой вопрос: Как я могу открыть его немедленно или хотя бы быстрее? В коде есть ошибка. Он работает, но он много использует процессор и становится достаточно медленным, чтобы не перемещаться по странице.
Спасибо!
Возможно http://en.wikipedia.org/wiki/Reentrancy_(computing) Не используйте setInterval, используйте SetTimeout что повторно передает цикл после завершения работы. Это гарантирует, что функция никогда не сможет повторно войти. – asawyer
Вы повторяете интервалы внутри цикла while, который знает, сколько интервалов вы используете одновременно? – adeneo
Вы запускаете auto_refresh каждый раз +1, если вы нажмете его. – zer02