Обновление AJAX Div из базы данных через jQuery.load - PullRequest
1 голос
/ 25 марта 2011

Я написал плагин для Wordpress, который генерирует список контента jQuery.accordion, который он извлекает из базы данных. У меня также есть получение новых результатов из базы данных каждые 5 секунд через отдельную страницу (update.php) через метод jQuery.load.

Проблема, с которой я сталкиваюсь, заключается в том, что я генерирую полный HTML-код для div в файле update.php. Кажется, что я мог бы просто сделать запрос к базе данных, а затем вернуть результаты в основной файл, но я не уверен, как это сделать. В основном, моя забота в этом заключается в эффективности, потому что с тем, как я делаю вещи, это может значительно увеличить нагрузку на ресурсы браузера. У меня есть догадка, что использование этого метода будет продолжать расти, пока оно не достигнет пика и не произойдет сбой браузера.

Я ищу какие-либо рекомендации о том, как лучше это кодировать. Ниже приведены примеры для проверки концепции, поэтому я хотел бы, чтобы кто-либо предлагал отзывы, будь то конструктивные или критические. Спасибо!

main.php:

<script type="text/javascript">
$(function() {
  $("#accordion").load("update.php");
  var refresh = setInterval(function() {
    $k("#accordion").load("update.php");
  }, 5000);
});
</script>

<div id="accordion"></div>

update.php:

<?php
function page_update() {
  global $wpdb;
  $out = '';

  $out .= '<script type="text/javascript" src="jquery-1.5.min.js"></script>';
  $out .= '<script type="text/javascript" src="jquery-ui-1.8.11.custom.min.js"></script>';
  $out .= '<script type="text/javascript">
           var $j = jQuery.noConflict();
           $j(function() {
             $j("#accordion").accordion();
           });
           </script>';

  $sql = "SELECT * FROM table ORDER BY name DESC;";
  $results = $wpdb->get_results($sql);

  foreach($results as $res) {
    $out .= '<h3>'.$res->name.'</h3>';
    $out .= '<div id="content-'.$res->name.'">'.$res->score.'</div>';
  }

  echo $out;
}

page_update();
?>

Ответы [ 2 ]

0 голосов
/ 25 марта 2011

У меня есть предположение, что использование этого метода будет продолжать расти до тех пор, пока оно неизбежно не достигнет пика и браузер не выйдет из строя..php закончит работу до того, как будет вызван снова.Вы сделали правильный выбор, используя setInterval вместо setTimeOut здесь, так как в этом случае setTimeOut был бы менее эффективен с ресурсами памяти.

Я не слишком уверен, что они более эффективны, чем setInterval.Что-то, что могло бы быть более эффективным, было бы, если бы вы установили его на обновление только в том случае, если что-то меняется, а не каждые 5 секунд.

0 голосов
/ 25 марта 2011
  1. Вы не должны использовать глобальное ключевое слово. Почему?

  2. Перед тем, как перерисовать все свои аккордеонные div, вы должны сделать функцию, которая проверяет, есть ли какие-либо изменения в базе данных. Если изменений нет, их перерисовывать не нужно.

  3. Если есть изменение, вы можете перерисовать только затронутую строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...