最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

nodejs如何獲取時間戳與時間差

 更新時間:2016年08月03日 10:28:56   投稿:daisy  
本文詳細(xì)介紹了nodejs獲取時間戳與時間差的多種方法,對平時nodejs的使用很有幫助,下面一起來看看吧。

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

    1.new Date().getTime()

    2.Date.now()

    3.process.uptime()

    4.process.hrtime()

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

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

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

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

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()是最佳的做法,但是如果要計算時間差,這幾個方法就會有點(diǎn)問題:運(yùn)行環(huán)境的系統(tǒng)時間有時候是會有微小回調(diào)的,這樣得到的時間差就不精確了,有時候會引發(fā)某些BUG。

process.hrtime()

這種方式是根據(jù)任意取的一個過去的時間點(diǎn),距離現(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左右啊!

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

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

process.uptime()

此函數(shù)是通過nodejs啟動運(yùn)行時間來得到一個秒數(shù)時間戳,精確到毫秒:

process.uptime

輸入:6.419

此函數(shù)以node啟動時間為準(zhǔn),同樣也不會受系統(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)文章

  • 充分發(fā)揮Node.js程序性能的一些方法介紹

    充分發(fā)揮Node.js程序性能的一些方法介紹

    這篇文章主要介紹了充分發(fā)揮Node.js程序性能的一些方法介紹,Node.js是把JavaScript用于服務(wù)器端的框架,需要的朋友可以參考下
    2015-06-06
  • 詳解nodejs 開發(fā)企業(yè)微信第三方應(yīng)用入門教程

    詳解nodejs 開發(fā)企業(yè)微信第三方應(yīng)用入門教程

    這篇文章主要介紹了詳解nodejs 開發(fā)企業(yè)微信第三方應(yīng)用入門教程,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • Nodejs實(shí)現(xiàn)的操作MongoDB數(shù)據(jù)庫功能完整示例

    Nodejs實(shí)現(xiàn)的操作MongoDB數(shù)據(jù)庫功能完整示例

    這篇文章主要介紹了Nodejs實(shí)現(xiàn)的操作MongoDB數(shù)據(jù)庫功能,結(jié)合完整實(shí)例形式分析了nodejs針對MongoDB數(shù)據(jù)庫的連接及增刪改查基本操作技巧,需要的朋友可以參考下
    2019-02-02
  • Node快速切換版本、版本回退(降級)、版本更新(升級)

    Node快速切換版本、版本回退(降級)、版本更新(升級)

    這篇文章主要介紹了Node快速切換版本、版本回退(降級)、版本更新(升級),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 詳解Nodejs mongoose

    詳解Nodejs mongoose

    Mongoose 是在nodejs環(huán)境下,對mongodb進(jìn)行便捷操作的對象模型工具。本文介紹解(翻)密(譯)Mongoose插件。這篇文章給大家詳細(xì)介紹了Nodejs mongoose 的相關(guān)知識,感興趣的朋友一起看看吧
    2018-06-06
  • 實(shí)戰(zhàn)node靜態(tài)文件服務(wù)器的示例代碼

    實(shí)戰(zhàn)node靜態(tài)文件服務(wù)器的示例代碼

    本篇文章主要介紹了實(shí)戰(zhàn)node靜態(tài)文件服務(wù)器的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • nodejs實(shí)現(xiàn)獲取當(dāng)前url地址及url各種參數(shù)值

    nodejs實(shí)現(xiàn)獲取當(dāng)前url地址及url各種參數(shù)值

    這篇文章主要介紹了nodejs實(shí)現(xiàn)獲取當(dāng)前url地址及url各種參數(shù)值,本文直接給出代碼實(shí)例,需要的朋友可以參考下
    2015-06-06
  • Ubuntu中搭建Nodejs開發(fā)環(huán)境過程分享

    Ubuntu中搭建Nodejs開發(fā)環(huán)境過程分享

    這篇文章主要介紹了Ubuntu中搭建Nodejs開發(fā)環(huán)境過程,比較郁悶的是apt-get安裝失敗了,如果有遇到一樣問題的朋友,可以參考一下本文
    2014-06-06
  • 基于 Docker 開發(fā) NodeJS 應(yīng)用

    基于 Docker 開發(fā) NodeJS 應(yīng)用

    這是兩篇文章的第一篇。本文涵蓋了有關(guān)在使用 Express 框架開發(fā)一個Node應(yīng)用時,用Docker 替代 Vagrant 的比較詳細(xì)的教程, 應(yīng)用將使用 connect-redis 中間件將會話信息持久化到Redis中. 第二篇文章將介紹到將這個開發(fā)的設(shè)置產(chǎn)品化.
    2014-07-07
  • Electron 調(diào)用命令行(cmd)

    Electron 調(diào)用命令行(cmd)

    這篇文章主要介紹了Electron 調(diào)用命令行(cmd),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09

最新評論

阳西县| 阿勒泰市| 富顺县| 砚山县| 凤山县| 东港市| 漠河县| 新化县| 疏勒县| 定兴县| 巨野县| 亳州市| 吉安县| 汨罗市| 东光县| 宜君县| 积石山| 靖江市| 阿拉善左旗| 萍乡市| 深圳市| 舒兰市| 祁门县| 定边县| 大同市| 蓝山县| 阳新县| 马关县| 独山县| 那曲县| 信丰县| 武邑县| 灵宝市| 嘉黎县| 楚雄市| 铜梁县| 鹰潭市| 北流市| 蓬安县| 峨边| 进贤县|