簡體   English   中英

使用performance.now()校准時間是否安全?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM