[英]toFixed() behavior on performance.now()
在performance.now
上使用toFixed
時,它會顯示一些我認為通常是四舍五入的數字。 但看起來,范圍因平台而異。
在 chrome(v87.0.4280.66) 上,最多可以得到 35 位數字
window.performance.now().toFixed(35); // "241989.00499999945168383419513702392578125"
在 node.js(v15.2.1) 上,最多只有 28 個。
performance.now().toFixed(28) // "1092.9840000011026859283447265625"
performance.timeOrigin
也存在相同的行為。 我認為可以使用performance.now()
進行更准確的測量,但准確度取決於硬件和軟件因素,因此他們只是將准確度保持在最低標准。
performance.now()
上使用toFixed(100)
performance.now()
會使其更准確嗎?performance.now()
范圍?(performance.timeOrigin + performance.now()).toFixed(12)
讓我們測量精確到幾乎飛秒 (10⁻¹⁵) 或至少比Date.now()
准確得多的Date.now()
?我認為說toFixed()
使它更准確是錯誤的。
基本上toFixed()
只格式化輸入數字。
至於performant.now()
它返回毫秒值,表示自時間原點以來經過的時間。
時間原點是一個標准時間,被認為是當前文檔生命周期的開始。
因此,根據您的問題,您可以想象該值在不同平台上的計算方式不同。
來自mozilla.org :
如果當前文檔是窗口中加載的第一個文檔,則時間原點是創建瀏覽器上下文的時間。
如果在卸載窗口中加載的上一個文檔的過程中,出現了一個確認對話框讓用戶確認是否離開上一個頁面,則時間原點是用戶確認導航到該頁面的時間。新頁面是可以接受的。
如果以上都沒有確定時間原點,則時間原點是負責創建窗口當前文檔的導航發生的時間。
Node 的performance.now
字面意思是:
function now() {
const hr = process.hrtime();
return hr[0] * 1000 + hr[1] / 1e6;
}
它的精度是納秒級。 (所以不是在那個 API 中沒有意義的點之后的 26 位數字)。 這只是調用uv_hrtime
(參見 node_process_methods.cc),它執行clock_gettime這只是獲取納秒時間的標准方法。
在瀏覽器中情況更糟 - 因為進行指紋識別或緩存值提取performance.now
的定時攻擊。現在不太准確:
為了防止計時攻擊和指紋識別,performance.now() 的精度可能會根據瀏覽器設置四舍五入。
所以你真的可以依賴毫秒值。
它返回的內容被限制在 chrome 中。 有關更多信息,請參閱time_clamper.cc
。 基本上它的percision僅限於:
static constexpr double kResolutionSeconds = 5e-6;
故意地。
正如另一個答案指出的那樣.toFixed
只是將數字格式化為字符串,與任何這些都無關。
注:這樣的事實的API是精確的X
位不以任何方式表明第十屆后的數字是零。 這僅意味着您只能依賴該數字的准確性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.