0

私はこのシンプルな機能を使用していますが、Webページを開いた時間によっては、Webサイトが大きく歪んでしまいます。ユーザーが更新したり、別のページに移動したりすると、更新に時間がかかります。

私は基本的にユーザーの新しい投稿に影響を与えているので、時間を実行し続ける必要があります。

この関数を使用しない場合、Webページはすぐに読み込まれます。これは単純な関数ですが、Plzは代替アプローチを支援または提案します。

$(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に挿入してから、プロセス全体を繰り返す1秒のタイムアウトを開始します。


一般的なパターン:

(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 に答える