nodejsはタイムスタンプと時間差をどうやって取得しますか?

3180 ワード

Nodejsでタイムスタンプを取得する方法は様々です.
    1.new Date().getTime()
    2.Date.now()
    3.process.upttime()
    4.process.hrtime()
普段タイムスタンプを取得したいなら、これらの方法で大丈夫ですが、これらの方法にはどんな違いがありますか?
new Date().getTime()とDate.now()
これらの方法はnode運転環境によるシステム時間ミリ秒数、+new Date()書き方の効果とnew Date().getTime()の効果が同じです.
タイムスタンプを頻繁に使用する必要があるシーンでは、方法の性能に注目する必要があります.これらの方法の中では、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);
出力結果:
【new Date().getTime()】interval:1583
【+new Date】interval:2189
【Date.now()】interval:891
タイムスタンプを取得するだけなら、Date.now()を使うのが一番いい方法ですが、時間差を計算するには、このいくつかの方法が問題になります.運行環境のシステム時間はたまに微調整があります.このようにして得られた時間差は正確ではないです.
process.hrtime()
この方法は、過去の時間点を任意に取って、現在の時間から正確なタイムスタンプオブジェクトを取得することです.「秒、ナノ秒」

> process.hrtime()
[ 3197146, 563552237 ]
この方式はシステム時間とは関係がないので、システムクロックドリフトの影響を受けず、時間差を計算する時にバグが発生しない.
でも、何でもあります.
頻繁に呼び出されるところに使うなら?

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は記憶が間違っていないと同じ作成回数です.上のDate.nowは900 msぐらいです.
process.hrtime()も遅すぎて有木あり!!
もとはnodejsが高精度の時間を処理する時、計算は比較的に複雑で、システムの資源を占用するのは多くて、スピードは遅くて、高周波の応用の地方でこの方法を使うことに適しませんでした.プロcess.up timeを見てください.
process.upttime()
この関数はnodejsの運転開始時間によって1秒のタイムスタンプを取得します.ミリ秒まで正確です.
process.up time
入力:6.419
この関数はnode起動時間に準じています.システムクロックドリフトの影響もなく、時間差の計算にも適しています.
では、マルチコールの性能はどうですか?

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.upptime()】interval:954
プロcess.hrtime()に比べて性能がかなり上がっています.
そんなに正確に計算しなくてもいいです.速いです.
高周波の計算時間が必要な場合は、あなたです.
以上nodejsはタイムスタンプと時間差の全部の内容を取得しました.皆さんが普段使っているnodejsを使う時に役に立ちたいです.