[英]Is it safe to use performance.now() to calibrate time?
我想知道我是否沒有預見到我的方法可能存在的問題。
class RDate {
constructor(serverIsoDate) {
this.serverDate = new Date(serverIsoDate);
this.localDate = new Date();
this.localTick = performance.now();
}
getCompensatedDate() {
return this.serverDate.getTime() + (performance.now()-this.localTick);
}
}
我會定期獲取serverDate,但是如果用戶長時間不運行webapp,即使用戶欺騙了自己的時鍾,我也可以保證正確的時間。
該選項卡掛起時,Performance.now是否溢出或暫停?
我可以通過計算localDate和localTick之間的差異來檢測時鍾漂移或被欺騙的程度
_spoofed() {
return Math.abs(this.localDate.getTime() - this.localTick - (Date.now() - performance.now())) > 1000 * 60 * 60;
}
Performance API上的MDN文檔說:
由於平台的系統時鍾會受到各種偏差(例如NTP調整)的影響,因此接口支持單調時鍾,即始終在增加的時鍾。
這似乎表明用於performance.now()
的時鍾應獨立於系統時鍾。
我不認為它的時鍾可以暫停。 對performance.now()
的描述是:
返回的值表示自時間原點起經過的時間。
掛起標簽時,時間原點不會改變,因此應包括掛起時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.