定期调用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调用而使系统变慢?
答
这里有一个潜在的问题,如果你从调试器中检查你的网络调用,这将是显而易见的。由于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);
}
});
})();
我将承担系统可以处理一个Ajax调用每4秒,除非人很多都使用相同的脚本。 –
一个建议:除非值中实际包含需要解析的HTML,否则使用'.text()'而不是'.html()'。插入文本而不解析应该更快。 – Barmar
'ajax'不是直接的。所以对于缓慢的连接,'setInterval'会在先前的结束前排队ajax调用。改用一个回调队列。 – zzzzBov