ホームページ  >  記事  >  ウェブフロントエンド  >  Nodejsでタイムスタンプと時差を取得する方法

Nodejsでタイムスタンプと時差を取得する方法

高洛峰
高洛峰オリジナル
2017-02-04 11:02:521256ブラウズ

Nodejs でタイムスタンプを取得するには、次のような方法がたくさんあります。

1.new Date().getTime()

2.Date.now()

3.process.uptime()

4 .process.hrtime()

通常、タイムスタンプを取得したい場合は、これらのメソッドを使用できます。では、これらのメソッドの違いは何でしょうか?

new Date().getTime() および Date.now()

これらのメソッドは、ノード実行環境のシステム時間のミリ秒を使用します。+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(&#39;【new Date().getTime()】interval: &#39;, interval);
 
t1 = new Date().getTime();
for(i = 0; i < count; i++)
{
  t2 = +new Date;
  interval = (t2 - t1);
}
interval = (t2 - t1);
console.log(&#39;【+new Date】interval: &#39;, interval);
 
t1 = new Date().getTime();
for(i = 0; i < count; i++)
{
  t2 = Date.now();
  interval = (t2 - t1);
}
interval = (t2 - t1);
console.log(&#39;【Date.now()】interval: &#39;, interval);

Output を使用してテストできます。結果:

【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(&#39;【hrTime】interval: &#39;, interval, t2 - t1);

【hrTime】interval: 6412 6413 私の記憶が正しければ、上記の Date.now() は、同じ作成数でも約 900ms かかります。

process.hrtime() が遅すぎます! ! !

nodejs が高精度の時刻を扱うと、計算がより複雑になり、多くのシステムリソースを消費し、速度が遅いため、この方法は高頻度のアプリケーションには適していないことがわかりました。以下を参照してください。 process.uptime()

process.uptime()

この関数は、nodejs の起動実行時間を使用して、ミリ秒単位の精度でタイムスタンプを秒単位で取得します:

process.uptime


入力: 6.419

これこの関数はノードの起動時刻に基づいており、システムクロックのドリフトの影響を受けないため、時差の計算に適しています。

何度も電話をかけた後のパフォーマンスはどうですか?

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(&#39;【process.uptime()】interval: &#39;, interval);

出力: [process.uptime()]interval: 954

process.hrtime()と比較すると、パフォーマンスがはるかに優れています~

それほど正確である必要はなく、高速です!

高頻度で時差を計算する必要があるのはあなたです!

以上がタイムスタンプと時差を取得するためのnodejsの全内容です。nodejsを使用する際の参考になれば幸いです。

nodejs でタイムスタンプと時差を取得する方法に関するその他の記事については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。