nodejs如何獲取時間戳與時間差
Nodejs中獲取時間戳的方法有很多種,例如:
1.new Date().getTime()
2.Date.now()
3.process.uptime()
4.process.hrtime()
平時想獲取一個時間戳的話,用這些方法都可以,那么這些方法有什么區(qū)別呢?
new Date().getTime()和Date.now()
這些方法是通過node運行環(huán)境的系統(tǒng)時間毫秒數(shù), +new Date() 寫法的效果和 new Date().getTime() 效果相同。
在需要頻繁使用時間戳的場景中,需要關(guān)注方法性能,這幾種方法中 Date.now() 的性能最佳,可以通過一點代碼來測試:
var t1 = new Date().getTime(); var t2 = t1; var i = 0, count = 10000000, interval = 0; for(i = 0; i < count; i++) { t2 = new Date().getTime(); interval = (t2 - t1); } interval = (t2 - t1); console.log('【new Date().getTime()】interval: ', interval); t1 = new Date().getTime(); for(i = 0; i < count; i++) { t2 = +new Date; interval = (t2 - t1); } interval = (t2 - t1); console.log('【+new Date】interval: ', interval); t1 = new Date().getTime(); for(i = 0; i < count; i++) { t2 = Date.now(); interval = (t2 - t1); } interval = (t2 - t1); console.log('【Date.now()】interval: ', interval);
輸出結(jié)果:
【new Date().getTime()】interval: 1583
【+new Date】interval: 2189
【Date.now()】interval: 891
如果只是獲取時間戳,那么使用Date.now()是最佳的做法,但是如果要計算時間差,這幾個方法就會有點問題:運行環(huán)境的系統(tǒng)時間有時候是會有微小回調(diào)的,這樣得到的時間差就不精確了,有時候會引發(fā)某些BUG。
process.hrtime()
這種方式是根據(jù)任意取的一個過去的時間點,距離現(xiàn)在的時間來獲取一個精確的時間戳對象:[秒, 納秒]
> process.hrtime() [ 3197146, 563552237 ]
這種方式和系統(tǒng)時間無關(guān),因此不會受到系統(tǒng)時鐘漂移的影響,用來計算時間差的時候就不會有BUG了。
但是,萬事總有但是 - -
如果用在一個被頻繁調(diào)用的地方呢?
var t1 = new Date().getTime(); var t2 = t1; var i = 0, count = 10000000, interval = 0; var hrTime1 = process.hrtime(); var hrTime2 = hrTime1; t1 = new Date().getTime(); for(i = 0; i < count; i++) { hrTime2 = process.hrtime(hrTime1); } t2 = new Date().getTime(); interval = parseInt(hrTime2[0] * 1e3 + hrTime2[1] * 1e-6); console.log('【hrTime】interval: ', interval, t2 - t1);
【hrTime】interval: 6412 6413
沒有記錯的話,相同的創(chuàng)建次數(shù),上面的Date.now()可是900ms左右?。?/p>
process.hrtime()也太慢了有木有?。?!
原來nodejs處理高精度時間的時候,計算比較復雜,占用系統(tǒng)資源多,速度慢,那么在高頻應用的地方就不適合用這個方法了。下面請看process.uptime()
process.uptime()
此函數(shù)是通過nodejs啟動運行時間來得到一個秒數(shù)時間戳,精確到毫秒:
process.uptime
輸入:6.419
此函數(shù)以node啟動時間為準,同樣也不會受系統(tǒng)時鐘漂移影響,適合用來計算時間差。
那么多次調(diào)用性能如何呢?
var t1 = new Date().getTime(); var t2 = t1; var i = 0, count = 10000000, interval = 0; t1 = process.uptime()*1000; for(i = 0; i < count; i++) { t2 = process.uptime()*1000; //interval = (t2 - t1); } interval = (t2 - t1); console.log('【process.uptime()】interval: ', interval);
輸出:【process.uptime()】interval: 954
和process.hrtime()相比性能就搞出很多了~
不用算那么精確,就是快!
那么需要高頻計算時間差的場合,就是你了!
以上就是nodejs獲取時間戳與時間差的全部內(nèi)容,希望對大家平時使用nodejs的時候能有所幫助。
相關(guān)文章
Express實現(xiàn)Session身份認證的示例代碼
本文主要介紹了Express實現(xiàn)Session身份認證的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-01-01利用yarn實現(xiàn)一個webpack+react種子
其實以前就寫過如何使用React-router和Webpack快速構(gòu)建一個react程序。后來發(fā)現(xiàn)版本太老,于是乎最近又重新組織了下結(jié)構(gòu),使用最近發(fā)布的yarn作為包管理工具,介紹下基本安裝步驟,有需要的朋友們下面來一起看看吧。2016-10-10