0

私は持っている

  1. データベース内の 1-多数のユニット
  2. 各ユニットには、秒単位の独自の更新時間があります
  3. 動的コンテンツを含む Web ページ
  4. 現在、呼び出されるたびに自動更新 (2 分) が組み込まれています。以下を参照してください。

function refreshPage(){

minutes = 2;
seconds = 0;  
interval=120000;
getCheckedUnits(); //call to function that checks and updates stuff

}

function timedRefresh(timeoutPeriod) {
    //refreshPage();
    setInterval(refreshPage, timeoutPeriod);
    countdown('countdown');
}

var interval;
var minutes = 2;
var seconds = 0;

function countdown(element) {
    interval = setInterval(function() {
        var el = document.getElementById(element);
        if(seconds == 0) {
            if(minutes == 0) {
                el.innerHTML = "Waiting for refresh";
                clearInterval(interval);
                return;
            } else {
                minutes--;
                seconds = 60;
            }
        }
        if(minutes > 0) {
            var minute_text = minutes + (minutes > 1 ? ' minutes' : ' minute');
        } else {
            var minute_text = '';
        }
        var second_text = seconds > 1 ? 'seconds' : 'second';
        el.innerHTML = 'Page will auto-refresh in: ' + minute_text + ' ' + seconds + ' ' + second_text + ' remaining';
        seconds--;
    }, 1000);
}

私がする必要があるのは、ユーザーに透過的にし、必要に応じて更新を呼び出すことです (データベースに設定されている値があります)。

解決策として (JS-Ajax で)、上記と同じタイマー (5 秒に設定) を使用して、ID、最終更新時刻、および次回更新時刻を格納するオブジェクトを含む配列を作成できます。次に、現在の時間が次の更新時間よりも長い場合にのみ、各オブジェクトを更新できます。または、cron-job を介してこの方法にアプローチすることもできます。

私はこれまでにこれを行ったことがなく、経験に基づいた意見を聞きたい. 最良の選択肢は何ですか?

4

1 に答える 1

0

最終更新時刻をフェッチし、はるかに大きなデータをフェッチする前にそれらを比較するというスキームは、この問題に対する完全に有効なアプローチですが、他にも考慮できる方法があります。特に、達成しようとしているのはサーバープッシュと呼ばれます。最終更新のタイムスタンプを使用するとこれを概算できますが、ロングポーリングや (将来/一部のブラウザーで) WebSockest などの代替手法がいくつかの代替手段になります。

これは、同様の質問に対するより良い記事です。

于 2013-01-18T23:34:53.477 に答える