为什么setinterval减慢了网站的速度

时间:2012-11-23 12:49:52

标签: php jquery

我正在使用这个简单的功能,但它取决于网页打开的时间在网站上下了很多。当用户刷新或转到另一个页面时,刷新需要很长时间。

我基本上是在为用户提供新帖子。所以时间必须继续运行。

如果我不使用此功能,那么网页加载速度很快。虽然这是一个简单的功能 Plz帮助或建议任何替代方法。

$(document).ready(function() {
   setInterval( "timer();", 1000 );
});

function timer(){
    $.post('sendchat2.php', {option:'timer',id= $('#timer').val()}, function(data) {
        $('#timer').html(data);

    })
}

2 个答案:

答案 0 :(得分:3)

我就是这样做的:

$(function () {

    var $timer = $ ( '#timer' );

    (function timeout () {
        $.post( 'sendchat2.php', { option: 'timer', id = $timer.val() }, function ( data ) {
            $timer.html( data );
            setTimeout( timeout, 1000 );  
        });            
    }());

});

因此,您启动Ajax请求,等待响应,将其注入DOM,然后只有然后启动一秒钟的超时,从而重复整个过程。


一般模式:

(function f () {

    async(function () {

        // do work here

        setTimeout( f, delay );

    });

}());

因此,函数f执行一些异步操作(例如Ajax请求)。该操作的回调函数执行一些工作(例如将Ajax响应放入DOM),最后它设置一个定时器,在给定的延迟后调用f函数。

答案 1 :(得分:0)

减速不是因为setInterval(),你使用setInterval每1秒调用一次该函数“timer”,这应该会使页面减慢1000(1秒)。

问题在于$.post(),这是一个Ajax请求,究竟是做什么的,将一些信息发送到脚本(php),php然后处理导致某些输出的信息,然后这个输出是再次发送到第一页,$ .post()将此信息写入$('#timer')元素。

因此可能放缓是因为:

  • php脚本是生成延迟的地方
  • sendchat2.php返回的数据非常大,因此延迟了页面加载。

另外,每秒发送一个ajax请求不是很健康,php脚本可能会被重载。你可能想谷歌推送方法或轮询方法来正确开发聊天