JavaScript setInterval之后的高CPU使用率

high CPU usage after JavaScript setInterval

本文关键字:CPU 使用率 setInterval 之后 JavaScript      更新时间:2023-09-26

我有一个PHP代码,它从数据库中提取文本,并将其显示为链接。我每 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,并且速度越来越慢,无法在页面上导航。

谢谢!

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

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