performance.now() 與 Date.now() 對比

来源:https://www.cnblogs.com/beileixinqing/archive/2022/10/12/16785469.html
-Advertisement-
Play Games

概念 performance.now():返回值表示為從time origin之後到當前調用時經過的時間, time origin: 時間源, 時間源是一個可以被認定為當前文檔生命周期的開始節點的標準時間,計算方法如下: 如果腳本的 global object 是 Window, 則時間源的確定方式 ...


概念

performance.now():返回值表示為從time origin之後到當前調用時經過的時間,

time origin: 時間源,

時間源是一個可以被認定為當前文檔生命周期的開始節點的標準時間,計算方法如下:

  • 如果腳本的 global object 是 Window, 則時間源的確定方式如下:
    • 如果當前 Document 是中載入的第一個 Window, 則時間源是創建瀏覽器上下文的時間。
    • 如果處於卸載視窗中已載入的先前文檔的過程中,​​ 一個確認對話框會顯示出來,讓用戶確認是否離開前一頁,則時間源是用戶確認導航到新頁面的這個時間,這一點是被認同的。
    • 如果以上方式都不能確定時間源, 那麼時間源是創建視窗中當前 Document 的導航發生的時機。
  • 如果腳本中的全局對象是 WorkerGlobalScope (意味著,該腳本以 web worker 的形式運行), 則時間源是這個 worker 被創建的時刻。
  • 在所有其他情況下,時間源的值是 undefined。
 Date.now()Date.now() 方法返回自 1970 年 1 月 1 日 00:00:00 (UTC) 到當前時間的毫秒數。  

對比

  • performance.now() 和 JavaScript 中其他可用的時間類函數(比如Date.now)不同的是,window.performance.now()返回的時間戳沒有被限制在一毫秒的精確度內,相反,它們以浮點數的形式表示時間,精度最高可達微秒級。
  • 另外一個不同點是,window.performance.now()是以一個恆定的速率慢慢增加的,它不會受到系統時間的影響(系統時鐘可能會被手動調整或被 NTP 等軟體篡改)。另外,performance.timing.navigationStart + performance.now() 約等於 Date.now()
  • performance.now是瀏覽器(Web API)提供的方法,不同瀏覽器獲取到的精度不同。Date.now是Javascript內置方法,差異主要在於瀏覽器遵循的ECMAScript規範
  • Date.now() ≈ performance.timing.navigationStart + performance.now() 

適用場景

耗時計算

performance.now() 方法

performance.now()-performance.now() 
// 分別為兩個時刻的 performance.now()

 

優點:

  • 精確度高,低於 1ms(實際情況視瀏覽器的不同,精度大約在 0.1ms ~ 0.005ms 之間);
  • 記錄的時間可以被變數所保存,因此可以用於生產環境使用;

缺點:

  • 返回的值,跟打開網頁的時間有關(至少chrome如此),並不像 Date.now() 那樣直接返回現在距離 1970 年那個起始時間的毫秒數。

console.time方法

console.time("耗時")
for(let i=0;i<1000;i++){
    console.log(i)
}
console.timeEnd("耗時")

// 耗時: 38.914794921875 ms

優點:

  • 精度比較高(單位小於毫秒),連續兩行 console.time('耗時') 和 ··console.timeEnd('耗時')··,他也能計算出時間差異;

缺點:

  • 首先只能在控制台顯示結果,他本身是沒有返回值的;
  • 不能提交到伺服器日誌;

Date.now() 方法

前後兩個時間相減即可。

優點:

  • 可以獲取當前的時間,並且被變數保存;

缺點:

  • 精度太低,小於 1ms 的測試不出來結果;

 

參考文檔:

https://developer.mozilla.org/zh-CN/docs/Web/API/Performance/now

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date/now

https://developer.mozilla.org/zh-CN/docs/Web/API/DOMHighResTimeStamp#the_time_origin

https://zhuanlan.zhihu.com/p/570601679

https://blog.csdn.net/weixin_34240657/article/details/91422212


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、MySQL資料庫內置系統表 mysql5.7之後的版本自帶資料庫為 1.information_schema資料庫 這個庫在mysql中就是個信息資料庫,它保存著mysql伺服器所維護的所有其他資料庫的信息,包括了資料庫名,表名,欄位名等。在註入中,infromation_schema庫的作用無 ...
  • GreatSQL社區原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。 GreatSQL是MySQL的國產分支版本,使用上與MySQL一致。 文章導讀: 什麼是Undo Log? Undo:意為撤銷或取消,以撤銷操作為目的,返回某個狀態的操作。 Undo Log:資料庫事務開始之前,會將要修改 ...
  • 摘要:本文重點介紹單個SQL語句持續執行慢的場景。 本文分享自華為雲社區《GaussDB(DWS) SQL性能問題案例集》,作者:黎明的風。 本文重點介紹單個SQL語句持續執行慢的場景。我們可以對執行慢的SQL進行單獨分析,SELECT、INSERT、UPDATE等語句都可以使用explain ve ...
  • 當前Nebula Graph的最新版本是3.2.1, Nebula Graph 的一些特點 1. 支持分散式. 相對於Neo4j, TigerGraph這些圖資料庫, Nebula 是面向分散式設計的, 因此對集群的支持比較完備, 在規模上上限要高很多. 在實際項目中存儲了180億的點邊, 這個數量... ...
  • 2.1關係數據結構形式化定義: 2.1.1關係: 單一的數據結構 - 關係: 現實世界的實體以及實體間的各種聯繫均用關係來表示 邏輯結構 - 二維表: 從用戶的角度,關係模型中的數據的邏輯結構是一張二維表 關係模型是建立在集合代數的基礎上 域:域是一組具有相同數據類型的值的集合 例:整數、實數、介於 ...
  • GreatSQL社區原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。 GreatSQL是MySQL的國產分支版本,使用上與MySQL一致。 一、MySQL的dd表介紹 二、代碼跟蹤 三、知識應用 四、總結 一、MySQL的dd表介紹 MySQL的dd表是用來存放表結構和各種建表信息的,客戶端 ...
  • 快速上手iOS UIKit UIKit是蘋果官方的framework, 其中包含了各種UI組件, window和view, 事件處理, 交互, 動畫, 資源管理等基礎設施支持. 按照前面的介紹, 用UIKit寫UI可以用storyboard(Interface Builder)和代碼兩種方式. 大體 ...
  • 一、打包過程 1、創建唯一標識符 首先,申請蘋果開發者賬號。 沒有蘋果開發者賬號是無法進行 ios 打包上線的。 (2) 進入 https://developer.apple.com 這個網址,點擊“account” 並輸入蘋果開發者賬號進入用戶界面。 ​ (3) 點擊證書文件 ​ (4) 進入到這 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...