2010-12-19 89 views
4

我試圖創建基於服務器上的時間的倒計時器。使用服務器時間的JavaScript倒數計時器

我最初有服務器設置剩餘時間,只是做了1秒setTimeout這會減少時間。

我發現了兩個問題與此:

  1. 沒有從服務器設置的時間,直到客戶端的網頁渲染和JavaScript開始運行滯後。滯後量取決於用戶互聯網連接和計算機/ JavaScript引擎的速度。
  2. 我認爲1秒鐘的setTimeout可能已經在較慢的電腦上稍稍落後了。

我改變了它,服務器會設置結束時間,並且客戶端上的JavaScript需要時間(UTC)並計算剩餘的剩餘時間。然後它會在每個setTimeout回調中執行此操作。這使得時間和倒計時完美。如果客戶端具有快速的計算機/ JavaScript引擎,則計時器停留在頁面上。如果計算機/ JavaScript引擎速度較慢,您可能會看到第二個被跳過,但時間永遠不會關閉。

我發現1個問題,到目前爲止這種方法:

  1. 每個客戶端的時鐘可能會有所不同。

因此,如果客戶端計算機上的時間不正確,則剩下的時間可能會持續幾秒或30秒,甚至可能休息幾天。

有沒有一種方法可以讓我根據服務器的結束日期確切地確定時間?

回答

0

我不知道你需要什麼樣的分辨率,但是考慮到網絡和頁面渲染延遲,不可能讓客戶端 - 服務器協議比一秒鐘好得多。我建議你每5或10秒做一次ajax輪詢,並相應地調整你的計時器。還有comet,它本質上是「反向」ajax,它可以將時間推向客戶端。但無論如何,你仍然有網絡和渲染延遲來應對。