我已经为Wordpress编写了一个插件,它会生成一个jQuery.accordion列表,其中包含从数据库中提取的内容。我还通过jQuery.load方法通过单独的页面(update.php)每隔5秒从数据库中提取更新的结果。
我遇到的问题是我在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 :(得分:0)
您不应该使用global关键字。 Why?
在重绘所有手风琴div之前,您应该创建一个函数来检查数据库中是否有任何更改。如果没有变化,则无需重绘。
如果有更改,您只能重绘受影响的行。
答案 1 :(得分:0)
我有一种预感,即使用这种方法,内存使用率将继续攀升,直到它不可避免地达到峰值并且浏览器崩溃。
内存使用率不会继续攀升,因为每次执行update.php都会在再次调用之前完成。你在这里使用setInterval而不是setTimeOut做出了正确的选择,因为在这种情况下,setTimeOut对内存资源的效率会降低。
我不太确定它们是否比setInterval更有效。可能更有效的方法是,如果您将其设置为仅在某些内容发生更改而不是每5秒更新时刷新一次。