Bagaimana saya bisa mendapatkan cap waktu paling akurat di Node.js?
ps Versi Node.js saya adalah 0.8.X dan ekstensi node-microtime tidak berfungsi untuk saya (macet saat menginstal)
javascript
node.js
v8
NiLL
sumber
sumber
Date.now()
silahkan.process.hrtime()
process.hrtime()
tidak mengembalikan waktu saat ini.Di Node.js, "waktu resolusi tinggi" tersedia melalui
process.hrtime
. Ia mengembalikan array dengan elemen pertama waktu dalam detik, dan elemen kedua nanodetik tersisa.Untuk mendapatkan waktu saat ini dalam mikrodetik, lakukan hal berikut:
(Terima kasih kepada itaifrenkel untuk menunjukkan kesalahan dalam konversi di atas.)
Di browser modern, waktu dengan presisi mikrodetik tersedia sebagai
performance.now
. Lihat https://developer.mozilla.org/en-US/docs/Web/API/Performance/now untuk dokumentasi.Saya telah membuat implementasi fungsi ini untuk Node.js, berdasarkan
process.hrtime
, yang relatif sulit digunakan jika Anda hanya ingin menghitung perbedaan waktu antara dua titik dalam sebuah program. Lihat http://npmjs.org/package/performance-now . Sesuai spesifikasi, fungsi ini melaporkan waktu dalam milidetik, tetapi ini mengambang dengan presisi sub-milidetik.Dalam Versi 2.0 modul ini, milidetik yang dilaporkan relatif terhadap saat proses node dimulai (
Date.now() - (process.uptime() * 1000)
). Anda perlu menambahkannya ke hasil jika Anda menginginkan stempel waktu yang mirip denganDate.now()
. Perhatikan juga bahwa Anda harus menghitung ulangDate.now() - (process.uptime() * 1000)
. KeduaDate.now
danprocess.uptime
sangat tidak bisa diandalkan untuk pengukuran yang tepat.Untuk mengetahui waktu saat ini dalam mikrodetik, Anda dapat menggunakan sesuatu seperti ini.
Lihat juga: Apakah JavaScript menyediakan pengatur waktu resolusi tinggi?
sumber
process.hrtime()
untuk mendapatkan sebuah diff. misalnyavar startTime = process.hrtime();
dan kemudianvar diff = process.hrtime(startTime);
.require("performance.now")
seharusnyarequire("performance-now")
?process.hrtime()
tidak mengembalikan waktu saat ini.Diketahui bahwa
now
:sumber
process.hrtime()
tidak mengembalikan waktu saat ini.The
BigInt
tipe data didukung sejak Node.js 10.7.0. ( lihat juga pengumuman posting blog ). Untuk versi Node.js yang didukung ini,process.hrtime([time])
metode tersebut sekarang dianggap sebagai 'warisan', diganti denganprocess.hrtime.bigint()
metode tersebut.tl; dr
process.hrtime.bigint()
process.hrtime()
sumber
Ada juga https://github.com/wadey/node-microtime :
sumber
Node.js nanotimer
Saya menulis pustaka / objek pembungkus untuk node.js di atas
process.hrtime
pemanggilan fungsi. Ini memiliki fungsi yang berguna, seperti tugas sinkronisasi waktu dan asinkron, ditentukan dalam hitungan detik, milidetik, mikro, atau bahkan nano, dan mengikuti sintaksis timer javascript bawaan agar lebih familiar.Objek pengatur waktu juga terpisah, sehingga Anda dapat memiliki sebanyak yang Anda inginkan, masing-masing dengan proses
setTimeout
atausetInterval
prosesnya sendiri .Ini disebut nanotimer . Saksikan berikut ini!
sumber
Untuk bekerja dengan lebih presisi dari
Date.now()
, tetapi dengan milidetik dalam presisi float:sumber
Dapatkan
hrtime
sebagai nomor tunggal dalam satu baris:Array.reduce
, jika diberi satu argumen, akan menggunakan elemen pertama larik sebagai nilai awalaccumulator
. Seseorang dapat menggunakan0
sebagai nilai awal dan ini akan berhasil juga, tetapi mengapa melakukan ekstra* 0
.sumber
ada paket npm yang terikat ke fungsi gettimeofday () sistem, yang mengembalikan stempel waktu presisi mikrodetik di Linux. Telusuri npm
gettimeofday
. Menelepon C lebih cepat dariprocess.hrtime()
sumber
Tulis ulang untuk membantu pemahaman cepat:
Sumber: https://nodejs.org/api/process.html#process_process_hrtime_time
sumber
Saya tidak begitu bangga dengan solusi ini tetapi Anda dapat memiliki stempel waktu dalam mikrodetik atau nanodetik dengan cara ini:
Tahu bahwa:
Date.now()
Date.now()
denganNumber(new Date())
untuk mendapatkan stempel waktu dalam milidetikEdit:
Di sini solusi untuk memiliki mikrodetik dengan koma, namun, versi angka akan dibulatkan secara native oleh javascript. Jadi jika Anda menginginkan format yang sama setiap saat, Anda harus menggunakan versi String-nya.
sumber
process.hrtime () tidak memberikan ts saat ini.
Ini seharusnya berhasil.
sumber
lebih baik?
sumber