JavaScript setInterval之后的高CPU使用率

时间:2013-09-12 20:43:31

标签: javascript php jquery cpu

我有一个PHP代码从数据库中提取文本,并在div中显示为链接。我每3000毫秒刷新一次DIV,刷新本身的CPU使用率仅高出几个百分点。在持续刷新20-25分钟后,当我点击其中一个链接时,打开该页面大约需要20秒,同时浏览器选项卡会冻结。更多刷新发生 - 打开链接所需的时间更长,以及打开更多链接时(如果打开10-15个链接,打开下一页的速度会慢到10-12秒)。当浏览器尝试打开链接时,1处理器线程已满载。这是代码(简化):

    <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次点击后延迟开始,每增加一次点击或刷新就会变大。

我的问题是:如何立即打开或至少更快打开?代码中有错误。它可以工作,但它正在使用CPU很多,并且变得足够慢以至于无法在页面上导航。

谢谢!

1 个答案:

答案 0 :(得分:0)

迟到了,但您可以尝试将setTimeouts链接在一起,如下所示:

function refreshments() {
    setTimeout(function(){
        //Do stuff
        refreshments();
    }, 1000);
}

refreshments();