2011-03-24 3 views
1

나는 데이터베이스에서 가져 오는 내용의 jQuery.accordion 목록을 생성하는 Wordpress 용 플러그인을 작성했습니다. 또한 jQuery.load 메서드를 통해 별도의 페이지 (update.php)를 통해 5 초마다 데이터베이스에서 최신 결과를 가져옵니다.AJAX Div 데이터베이스에서 jQuery.load를 통해 새로 고침

내가 겪고있는 문제는 update.php 파일에서 div의 전체 HTML을 생성하고 있다는 것입니다. 마치 데이터베이스에 쿼리를 작성한 다음 결과를 기본 파일로 리턴 할 수있는 것처럼 보이지만이를 수행하는 방법을 알지 못합니다. 기본적으로, 여기에서의 나의 관심사는 효율성이다. 왜냐하면 나는 브라우저 리소스에 상당한 세금을 부과 할 수 있기 때문이다. 메모리 사용량이 필연적으로 정점에 도달하고 브라우저가 충돌 할 때까지이 방법으로 계속 올라갈 것이라는 직감이 있습니다.

더 나은 코딩 방법에 대한 지침이 필요합니다. 아래에 개념 증명 예제를 제공 했으므로 다른 사람이 건설적이든 비판적이든 피드백을 제공하는 것을 좋아합니다. 고맙습니다!

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(); 
?> 

답변

0
  1. 전역 키워드를 사용할 수 없습니다. Why?

  2. 모든 accordion div를 다시 그리기 전에 데이터베이스에 변경 사항이 있는지 확인하는 기능을 만들어야합니다. 변경 사항이 없으면 다시 그릴 필요가 없습니다.

  3. 변경 사항이있는 경우 영향을받은 행만 다시 그릴 수 있습니다.

+0

제안 해 주셔서 감사합니다. 나는 단지 그것을 시도 할 것이다! – daveycroqet

0

나는 메모리 사용이 불가피 봉우리와 브라우저 충돌 할 때까지이 방법으로 올라 지속될 것으로 직감이있다.

update.php의 각 실행이 다시 호출되기 전에 메모리 사용량이 올라가지 않습니다. 여기서는 setTimeOut 대신 setInterval을 사용하여 올바른 선택을했습니다.이 경우 setTimeOut은 메모리 리소스의 효율성이 떨어 졌기 때문입니다.

나는 그것들이 setInterval보다 더 효율적인지 확실하지 않습니다. 더 효율적일 수있는 방법은 매 5 초가 아닌 변경된 경우에만 새로 고치도록 설정하는 것입니다.

+0

나는 당신에게 두 가지 신용을 줄 수 있었으면 좋겠다. 그래도 내가 할 수 있다고 생각하지 않아. 당신은 모두 같은 대답에 도착했고 그것은 제가 취할 제안입니다. 도와 주셔서 감사합니다! – daveycroqet

관련 문제