.
聲明:本人只是分享一些靠譜的床長人工智慧教程相關免費pdf下載文檔而已,並非床長人工智慧網校的收費文章。尊重版權,支持原創!
在一些購物商城經常看到有很多商品做秒殺活動,也就是倒計時,本篇文章給大家介紹實現商品秒殺倒計時時間與伺服器時間同步,需要的朋友可以了解下
現在有很多網站都在做秒殺商品,而這其中有一個很重要的環節就是倒計時。
關於倒計時,有下面幾點需要注意
應該使用伺服器時間而不是本地時間本地時間存在時區不同用戶自行設置等問題。
要考慮網絡傳輸的耗時。
獲取時間時可直接從的響應頭中讀取通過來獲得,伺服器端不需要專門寫時間生成腳本。
過程分析
從伺服器讀到一個時間戳之後便開始計時,不考慮網絡傳輸的耗時
中的各項標註分別是上面的時間線採用標準時間,與伺服器和頁面的時間均無關
頁面項伺服器發起請求時的時間。
伺服器響應頁面的請求並返回時間戳給頁面的時間。
頁面接受到伺服器返回的時間戳並開始計時的時間。
伺服器倒計時結束的時間。
頁面倒計時結束的時間,同時也是用戶在倒計時結束那一刻點擊按鈕的時間。
伺服器接收到用戶點擊信息的時間。
可以看出,即使在倒計時結束的那一刻也就是秒殺開始那一刻用戶就立即點擊滑鼠,也會比實際開始搶拍的時間,即伺服器倒計時結束的時間晚一些可以很容易的看出,這個時間差正好等於,也就是從開始發送到接收到響應信息的耗時。
如果有些內行在頁面倒計時結束前用腳本發送請求,那麼其他用戶可就虧大了。
所以,我們要解決掉這個時間誤差的問題。
為了解決時間誤差的問題,我們將把頁面倒計時的時間縮短一小截由上面的分析可以得出,這一小截正好等於,使得用戶在倒計時結束時發送給伺服器的搶拍信息正好在伺服器倒計時結束時被接收到
中的各項標註與中相同時間線採用標準時間,與伺服器和頁面的時間均無關,新增的兩項標註的含義如下
在未對網絡傳輸耗時進行處理的情況下的時間。
在未對網絡傳輸耗時進行處理的情況下的時間。
由可見,網絡傳輸耗時造成的時間誤差已經完全被彌補了,彌補的方法是將倒計時結束的時間提前。
但是解決了網絡傳輸耗時造成的誤差問題,還有用戶電腦時間和伺服器時間不相同的問題,下面我們繼續討論。
用戶的電腦時間和伺服器時間一定是有差異的,甚至差幾個時區,怎麼解決這個問題呢?方法的要點如下
當頁面接收到伺服器返回的時間戳時,立即開始計時。
當頁面接收到伺服器返回的時間戳時,立即計算本地時間和伺服器返回的時間戳的時間差。
仍然使用來計時,而不是使用函數計時器很不穩定,誤差也很大,但時間的顯示與程序的邏輯必須基於本地時間和上一步中求得的時間偏差。
結論要點
頁面從接收到伺服器響應的時間戳開始計時,計時的時長應減掉從發送到接收整個過程的耗時,計時過程則使用本地時間來實現本地時間時間偏差。
有任何疑問或建議請留言,謝謝!
小技巧同步伺服器時間同步倒計時
之前在網上看到有人提問,如何在頁面上同步顯示伺服器的時間,其實實現方法有幾種,可能一般人立馬就想到可以使用每隔一秒去請求伺服器,然後將伺服器獲取到時間顯示在頁面上,這樣雖然能夠實現,但存在一個很大的問題,那就是每隔一秒去請求伺服器,這樣如果用戶多了,伺服器就會崩潰內存佔用率會很大,所以在我看來,這種方法不可行,我這裡給出一種解決方案,能夠實現同步伺服器時間同步倒計時,卻不佔用伺服器太多資源,下面我給寫實現的思路
第一步,當用戶第一次瀏覽頁面時,伺服器首先獲取當前時間並顯示在頁面上比如顯示在為中
第二步,設置一個每隔一秒就計算新的時間新時間以伺服器時間為初始值,然後每隔一秒累加一秒並生成新的時間
第三步,顯示第二步計算的時間
是不是很簡單,總結成一句話就是以伺服器時間為初始值,然後在頁面上自動每隔一秒就累加一秒生成新時間,這樣就能保證與伺服器時間同步了,誤差基本在幾秒內,應該沒關係了,好了看一下實現的代碼吧
第一次將伺服器時間顯示在這裡
代碼很簡單在此就不多作說明我上面只顯示時分秒,大家也可以加上日期,加上日期可在當時,直接從伺服器獲取一個日期或完整的時間,作為一次時間的校對,不懂的可以在下面評論,我會及時回復的,然後按照這種思路來實現一下同步倒計時,首先說明一下,什麼是同步倒計時,就是類似秒殺一樣,設置一個結束時間,然後計算當前時間與結束時間之間間隔,而且必需保證在不同的電腦瀏覽器上顯示的倒計時時間均相同,實現代碼如下。。。