国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > JavaScript > 正文

nodejs如何獲取時(shí)間戳與時(shí)間差

2019-11-20 09:19:06
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

Nodejs中獲取時(shí)間戳的方法有很多種,例如:

    1.new Date().getTime()

    2.Date.now()

    3.process.uptime()

    4.process.hrtime()

平時(shí)想獲取一個(gè)時(shí)間戳的話,用這些方法都可以,那么這些方法有什么區(qū)別呢?

new Date().getTime()和Date.now()

這些方法是通過(guò)node運(yùn)行環(huán)境的系統(tǒng)時(shí)間毫秒數(shù), +new Date() 寫法的效果和 new Date().getTime() 效果相同。

在需要頻繁使用時(shí)間戳的場(chǎng)景中,需要關(guān)注方法性能,這幾種方法中 Date.now() 的性能最佳,可以通過(guò)一點(diǎn)代碼來(lái)測(cè)試:

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

如果只是獲取時(shí)間戳,那么使用Date.now()是最佳的做法,但是如果要計(jì)算時(shí)間差,這幾個(gè)方法就會(huì)有點(diǎn)問(wèn)題:運(yùn)行環(huán)境的系統(tǒng)時(shí)間有時(shí)候是會(huì)有微小回調(diào)的,這樣得到的時(shí)間差就不精確了,有時(shí)候會(huì)引發(fā)某些BUG。

process.hrtime()

這種方式是根據(jù)任意取的一個(gè)過(guò)去的時(shí)間點(diǎn),距離現(xiàn)在的時(shí)間來(lái)獲取一個(gè)精確的時(shí)間戳對(duì)象:[秒, 納秒]

> process.hrtime()[ 3197146, 563552237 ]

這種方式和系統(tǒng)時(shí)間無(wú)關(guān),因此不會(huì)受到系統(tǒng)時(shí)鐘漂移的影響,用來(lái)計(jì)算時(shí)間差的時(shí)候就不會(huì)有BUG了。

但是,萬(wàn)事總有但是 - -

如果用在一個(gè)被頻繁調(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 沒有記錯(cuò)的話,相同的創(chuàng)建次數(shù),上面的Date.now()可是900ms左右啊!

process.hrtime()也太慢了有木有!!!

原來(lái)nodejs處理高精度時(shí)間的時(shí)候,計(jì)算比較復(fù)雜,占用系統(tǒng)資源多,速度慢,那么在高頻應(yīng)用的地方就不適合用這個(gè)方法了。下面請(qǐng)看process.uptime()

process.uptime()

此函數(shù)是通過(guò)nodejs啟動(dòng)運(yùn)行時(shí)間來(lái)得到一個(gè)秒數(shù)時(shí)間戳,精確到毫秒:

process.uptime

輸入:6.419

此函數(shù)以node啟動(dòng)時(shí)間為準(zhǔn),同樣也不會(huì)受系統(tǒng)時(shí)鐘漂移影響,適合用來(lái)計(jì)算時(shí)間差。

那么多次調(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()相比性能就搞出很多了~

不用算那么精確,就是快!

那么需要高頻計(jì)算時(shí)間差的場(chǎng)合,就是你了!

以上就是nodejs獲取時(shí)間戳與時(shí)間差的全部?jī)?nèi)容,希望對(duì)大家平時(shí)使用nodejs的時(shí)候能有所幫助。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 外汇| 禄劝| 铁岭市| 吴江市| 湖南省| 宜兰县| 磐石市| 巨鹿县| 正宁县| 泰兴市| 客服| 曲阳县| 大关县| 喀什市| 通道| 大埔县| 宁国市| 驻马店市| 龙山县| 石家庄市| 方城县| 乡宁县| 九寨沟县| 通化县| 静安区| 循化| 保亭| 吴忠市| 梓潼县| 津市市| 宝坻区| 集贤县| 庄浪县| 凯里市| 濉溪县| 石嘴山市| 安平县| 防城港市| 舞钢市| 二连浩特市| 湖州市|