定期调用AJAX函数是否会减慢应用程序的速度?

问题描述:

在我在我连续使用AJAX函数调用,比如低于某个特定页面的应用程序,定期调用AJAX函数是否会减慢应用程序的速度?

<script type="text/javascript"> 
     $(document).ready(function(){ 


      setInterval(function() { 
       $.ajax({ 
        url:'clmcontrol_livematchupdate', 
        type:'post', 
        dataType: 'json', 
        success: function(data) { 


         $('#lblbattingteam').html(data.battingnow); 
         $('#lblscore').html(data.score); 
         $('#lblwickets').html(data.wickets); 
         $('#lblovers').html(data.overs); 
         $('#lblballs').html(data.balls); 
         $('#lblextras').html(data.extras); 
         $('#lblrr').html(data.runrate); 

         $('#lblbowlingteam').html(data.bowlingnow); 
         $('#lblbowler').html(data.currentbowler); 
         $('#lblbowlerovers').html(data.bowlerovers); 
         $('#lblbowlerballs').html(data.bowlerballs); 
         $('#lblrunsgiven').html(data.runsgiven); 
         $('#lblextrasgiven').html(data.extrasgiven); 
         $('#lblwicketstaken').html(data.wicketstaken); 
         $('#lblecon').html(data.econ); 


        } 
       }); 
      }, 4000); 
     }); 
    </script> 

任何如何在第一次尝试应用程序运行良好,为我所期望的价值得到了更新,但几次尝试更多的后价值观正在努力更新,并没有发生进一步的更新。是否因为该函数由于连续的ajax调用而使系统变慢?

+0

我将承担系统可以处理一个Ajax调用每4秒,除非人很多都使用相同的脚本。 –

+1

一个建议:除非值中实际包含需要解析的HTML,否则使用'.text()'而不是'.html()'。插入文本而不解析应该更快。 – Barmar

+1

'ajax'不是直接的。所以对于缓慢的连接,'setInterval'会在先前的结束前排队ajax调用。改用一个回调队列。 – zzzzBov

这里有一个潜在的问题,如果你从调试器中检查你的网络调用,这将是显而易见的。由于ajax调用的非阻塞异步行为,您可能会同时进行ajax调用。根据您的浏览器,您只能同时拨打这么多电话,以便他们排队等候。在这些情况下,也没有执行订单的保证。

在你的情况下,我会在ajax选项中设置async: false。通过在setInterval回调中执行,您已经获得了非接口阻止行为。由于setInterval只是在方法调用之间应用一个定时器,所以在给定的时间内,您将永远不会有多个ajax调用操作(这可能是您的问题的罪魁祸首)。

最好不要使用setInterval(),因为如果第一个请求没有完成并启动另一个请求,那么最终可能会导致多个请求使用共享资源并相互挨饿。您可以通过等待安排下一个请求直到最后一个请求完成,从而避免此问题。

只是尝试:

(function ajaxInterval() { 
     $.ajax({ 
       url:'clmcontrol_livematchupdate', 
       type:'post', 
       dataType: 'json', 
       success: function(data) { 


        $('#lblbattingteam').html(data.battingnow); 
        $('#lblscore').html(data.score); 
        $('#lblwickets').html(data.wickets); 
        $('#lblovers').html(data.overs); 
        $('#lblballs').html(data.balls); 
        $('#lblextras').html(data.extras); 
        $('#lblrr').html(data.runrate); 

        $('#lblbowlingteam').html(data.bowlingnow); 
        $('#lblbowler').html(data.currentbowler); 
        $('#lblbowlerovers').html(data.bowlerovers); 
        $('#lblbowlerballs').html(data.bowlerballs); 
        $('#lblrunsgiven').html(data.runsgiven); 
        $('#lblextrasgiven').html(data.extrasgiven); 
        $('#lblwicketstaken').html(data.wicketstaken); 
        $('#lblecon').html(data.econ); 


       }, 
       complete: function() { 
        // Schedule the next request when the current one has been completed 
        setTimeout(ajaxInterval, 4000); 
       } 
      }); 
})();