0

我正在使用这个简单的功能,但是根据网页打开的时间,它会严重影响网站。当用户刷新或转到另一个页面时,刷新需要很长时间。

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

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

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

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

    })
}
4

2 回答 2

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在给定延迟后调用该函数。

于 2012-11-23T12:54:25.840 回答
0

减速不是因为setInterval(),您使用 setInterval 每 1 秒调用一次该函数“计时器”,这应该只会使页面减速 1000(1 秒)。

问题出在$.post(),这是一个 Ajax 请求,它究竟做了什么,向脚本 (php) 发送一些信息,然后 php 处理这些信息产生一些输出,然后这个输出再次发送到第一页,并且$.post() 将此信息写入您的 $('#timer') 元素中。

所以减速可能是因为:

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

此外,每秒发送一个 ajax 请求也不是很健康,php 脚本可能会过载。您可能想搜索推送方法或轮询方法以正确开发聊天

于 2012-11-23T12:57:58.023 回答