2011-08-18 68 views
1

目前,我每隔10分鐘使用一次Ajax請求來爲其他人更新某些內容和其他時間間隔。使用AJAX始終保持最新內容

我做這使用jQuery的:

  • 在鼠標移動,活動頁面進行檢查
  • 如果活動頁面並沒有給定的時間間隔內被更新,網頁更新

我這樣做是因爲雖然我希望內容保持最新,但我不希望它在後臺發送請求(當用戶不使用應用程序時)。這樣做也意味着如果用戶在一段時間內還沒有使用它,當他們再次開始使用它時,它會自動更新。

我想知道這是多少效率,因爲每當鼠標移動檢查被稱爲(並已放慢了性能有點 - 尤其是當試圖點擊鏈接) - 是一個更有效的方式來做到這一點?

謝謝!

+0

這看起來像一個很好的方式來做到這一點!從來沒有想過這樣做... – Nayish

回答

4

我寧願在鼠標移動的情況下激活/重置一個計時器,比如說60秒,並且設置固定間隔檢查只在該計時器超過零時運行。

這樣,每當鼠標移動時都不會進行檢查,並且如果用戶變爲非活動狀態,則更新檢查將在60秒後停止。

+0

所以當頁面加載啓動計時器。 當鼠標移動時將計時器重置爲60. 計時器倒計時直到達到0. 在設定的時間間隔內,檢查計時器是否大於0,如果是用戶處於活動狀態(大於0)更新,否則它不會。 這樣做的問題是,如果用戶已經離開了10分鐘,更新將在它們剛剛被激活之前被檢查過,並且不會再被檢查10分鐘? – Jamie

+0

所以重置固定間隔檢查定時器,如果移動計時器爲零(用戶一直處於非活動狀態)時,重置爲60. –

1

另一種可能的解決辦法是使用窗口blurfocus事件,以確定該窗口是活動:那麼

var checkForContentUpdates = true; 

$(window).focus(function() { 
    checkForContentUpdates = true; 
}); 

$(window).blur(function() { 
    checkForContentUpdates = false; 
}); 

你的AJAX程序將鑰匙關停了checkForContentUpdates布爾的。

我敢肯定,有些情況下,這不是傻瓜證明,所以你可能必須結合這種方法與其他邏輯。

+0

我想這可以工作,除了我目前的邏輯,它檢查更新被調用後多久在窗口焦點我會運行檢查並相應地更新。 – Jamie

+0

我可以看到的唯一問題是,如果用戶離開窗口集中並想離開他們的電腦,它仍然會更新...如果這與上面的方法相結合,但它可以完美工作 - 不會導致性能問題 – Jamie