0

コントロール マネージャ システムの通知センターを作成したいと考えています。次のようなものを使用する場合:

$(function(){
    setInterval(function(){
        $.post("url", { data: 'value' }, function(result){
            // check for updates
        });
    }, 1000);
});

ページは常に遅れています。このようなことを「バックグラウンドで」行うことはできませんか? 読み込みや遅延の問題はありませんか? それが可能であれば、それは素晴らしいことです!いろいろ試しましたがあまり効果がありませんでした。

4

3 に答える 3

0

間隔時間を 1 秒あたり 10 回より妥当な値に増やす必要があります。おそらく1秒に1回のような値で1000

于 2013-06-28T17:04:08.810 に答える
0

あなたが言及しているのは、ロングポーリングと呼ばれます。コードがページに対して何を行っているかを知らなければ、ページの遅延の原因を特定することは困難です。それでも、1 秒ごとにポーリングすると、規模を拡大するにつれてサーバーに大きな負荷がかかる可能性があります。

時間間隔を増やしたいと思うでしょう。3 ~ 10 秒に 1 回程度であれば、ユーザー エクスペリエンスに悪影響を与えることはありません。共有ドキュメント編集または描画アプリケーションを作成していない限り、人々は気付かないでしょう。単に通知をプッシュしているように聞こえます。

Web の「リアルタイム」通知が必要な場合は、WebSocket を使用します。WebSockets をサポートしていないブラウザーの場合でも、ロング ポーリングを実装する必要があります。詳細については、こちらの「ブラウザーの互換性」を参照してください

HTML5 Rocks にはWebSocket の優れた紹介があります。

于 2013-06-28T17:25:04.827 に答える
0

呼び出し間に保証された間隔が必要な場合は、setInterval の代わりに setTimeout を使用してみて、post/get コードを持つ同じ関数を呼び出します。何かのようなもの

function myTimeout() {
  //your code for post/get
  setTimeout(myTimeout, 1000);
}

これが行うことは、次の「myTimeout」への呼び出しの前に「前の間隔」が完了することを保証することです。これは setInterval を使用しても保証されないと思います。これは、あなたの場合、何があっても 1000 ミリ秒ごとにポストを作成する関数を呼び出します。遅延があると、呼び出しが目的の間隔 (1000 ミリ秒) だけ間隔をあけられない場合があります。ただし、これは呼び出し間の固定間隔を保証するものではありません (呼び出し/応答に指定された間隔よりも長い時間がかかる場合)。詳細については、https://developer.mozilla.org/en-US/docs/Web/API/window.setIntervalの「危険な使用法」という見出しの下を参照してください。

于 2013-06-28T18:19:45.713 に答える