欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

    1.new Date().getTime()

    2.Date.now()

    3.process.uptime()

    4.process.hrtime()

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

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

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

在需要頻繁使用時(shí)間戳的場景中,需要關(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

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

process.hrtime()

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

> process.hrtime()
[ 3197146, 563552237 ]

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

但是,萬事總有但是 - -

如果用在一個(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左右?。?/p>

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

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

process.uptime()

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

process.uptime

輸入:6.419

此函數(shù)以node啟動(dòng)時(shí)間為準(zhǔn),同樣也不會(huì)受系統(tǒng)時(shí)鐘漂移影響,適合用來計(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í)間差的場合,就是你了!

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

相關(guān)文章

  • Express實(shí)現(xiàn)Session身份認(rèn)證的示例代碼

    Express實(shí)現(xiàn)Session身份認(rèn)證的示例代碼

    本文主要介紹了Express實(shí)現(xiàn)Session身份認(rèn)證的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • Node.js 日志處理模塊log4js

    Node.js 日志處理模塊log4js

    今天和大家分享一下NodeJS中寫日志的一個(gè)常用第三方包:Log4js.下面我們就來詳細(xì)探討下吧
    2016-08-08
  • Node.js中的事件驅(qū)動(dòng)編程詳解

    Node.js中的事件驅(qū)動(dòng)編程詳解

    這篇文章主要介紹了Node.js中的事件驅(qū)動(dòng)編程詳解,本文主要講解理論性知識(shí),如什么是事件驅(qū)動(dòng)編程、什么是閉包、閉包如何幫助異步編程等知識(shí),需要的朋友可以參考下
    2014-08-08
  • 利用yarn實(shí)現(xiàn)一個(gè)webpack+react種子

    利用yarn實(shí)現(xiàn)一個(gè)webpack+react種子

    其實(shí)以前就寫過如何使用React-router和Webpack快速構(gòu)建一個(gè)react程序。后來發(fā)現(xiàn)版本太老,于是乎最近又重新組織了下結(jié)構(gòu),使用最近發(fā)布的yarn作為包管理工具,介紹下基本安裝步驟,有需要的朋友們下面來一起看看吧。
    2016-10-10
  • 一行命令搞定node.js 版本升級(jí)

    一行命令搞定node.js 版本升級(jí)

    今天,又發(fā)現(xiàn)一個(gè)超級(jí)簡單的升級(jí)node.js的方法。一行命令搞定,省去了重新編譯安裝的過程。
    2014-07-07
  • node+js搭建時(shí)間服務(wù)器的思路詳解

    node+js搭建時(shí)間服務(wù)器的思路詳解

    這篇文章主要介紹了node+js搭建時(shí)間服務(wù)器,通過本文的學(xué)習(xí)可以了解node的fs模塊怎么讀取數(shù)據(jù)及express怎么搭建服務(wù)器,設(shè)置數(shù)據(jù)接口的,需要的朋友可以參考下
    2022-07-07
  • 詳解nodejs微信公眾號(hào)開發(fā)——6.自定義菜單

    詳解nodejs微信公眾號(hào)開發(fā)——6.自定義菜單

    這篇文章主要介紹了詳解nodejs微信公眾號(hào)開發(fā)——6.自定義菜單,自定義菜單能夠幫助公眾號(hào)豐富界面,讓用戶更好更快地理解公眾號(hào)的功能。
    2017-04-04
  • 使用C++為node.js寫擴(kuò)展模塊

    使用C++為node.js寫擴(kuò)展模塊

    本文給大家介紹的是在window7下使用C++來給node.js編寫擴(kuò)展模塊的方法,附上一個(gè)簡單的hello實(shí)例,有需要的小伙伴可以參考下。
    2015-04-04
  • Node.js API詳解之 timer模塊用法實(shí)例分析

    Node.js API詳解之 timer模塊用法實(shí)例分析

    這篇文章主要介紹了Node.js API詳解之 timer模塊用法,結(jié)合實(shí)例形式分析了Node.js API中timer模塊基本功能、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-05-05
  • Node.js HTTP服務(wù)器中的文件、圖片上傳的方法

    Node.js HTTP服務(wù)器中的文件、圖片上傳的方法

    這篇文章主要介紹了Node.js HTTP服務(wù)器中的文件、圖片上傳的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09

最新評(píng)論