নোড.জেএস-এ কীভাবে মাইক্রোটাইম পাবেন?


100

নোড.জেএস-এ আমি কীভাবে সবচেয়ে সঠিক সময়ের স্ট্যাম্প পেতে পারি?

PS আমার নোড.জেএস এর সংস্করণ 0.8.X এবং নোড-মাইক্রোটাইম এক্সটেনশন আমার পক্ষে কাজ করে না (ইনস্টল করার সময় ক্রাশ)

উত্তর:


103

new Date().getTime()? এটি আপনাকে মিলিসেকেন্ডে একটি টাইমস্ট্যাম্প দেয় যা জেএস আপনাকে দেবে সবচেয়ে সঠিক।

আপডেট: যেমন ভান দ্বারা বলা হয়েছে, process.hrtime()নোড.জেএস এর মধ্যে উপলব্ধ - এটির রেজোলিউশন ন্যানোসেকেন্ড এবং অতএব এটি এর চেয়ে অনেক বেশি, এর অর্থ এই নয় যে এটি আরও সঠিক হতে হবে।

পিএস: process.hrtime()খালি পরিষ্কার হতে, আপনাকে Arrayবর্তমানের উচ্চ-রেজোলিউশন রিয়েল টাইমটি একটি [সেকেন্ড, ন্যানোসেকেন্ডস] সমেত একটি টুপল প্রদান করে


91
Date.now()অনুগ্রহ.
jAndy

51
ব্যবহার করুনprocess.hrtime()
ভনান

4
আমাকে একমত হতে হবে এই উত্তর সম্পূর্ণ ভুল। সঠিক উত্তরের জন্য নীচে উত্তর @ মেরিন স্টল দেখুন।
জাস্টিন ওয়ার্কেন্টিন

12
প্রক্রিয়া.ট্রাইম () এই সময়গুলি অতীতের একটি স্বেচ্ছাসেবী সময়ের সাথে সম্পর্কিত, এবং দিনের সময়ের সাথে সম্পর্কিত নয় এবং তাই ক্লক ড্রিফ্টের সাপেক্ষে নয়। প্রাথমিক ব্যবহার অন্তরগুলির মধ্যে পারফরম্যান্স পরিমাপ করার জন্য। সুতরাং এটি বর্তমান সময় দেয় না
অ্যালেক্স

9
শীর্ষস্থানীয় সমস্ত উত্তর ভুল। process.hrtime()বর্তমান সময় ফিরে না।

180

নোড.জেজে, "উচ্চ রেজোলিউশন সময়" এর মাধ্যমে উপলব্ধ করা হয় process.hrtime । এটি প্রথম উপাদানটির সাথে একটি সেকেন্ডে সময় দেয় এবং দ্বিতীয় উপাদানটি বাকি ন্যানোসেকেন্ডগুলি সরবরাহ করে।

মাইক্রোসেকেন্ডে বর্তমান সময় পেতে, নিম্নলিখিতটি করুন:

var hrTime = process.hrtime()
console.log(hrTime[0] * 1000000 + hrTime[1] / 1000)

( Itaifrenkel ধন্যবাদ উপরের রূপান্তরটিতে একটি ত্রুটি নির্দেশ করার জন্য ।)

আধুনিক ব্রাউজারগুলিতে মাইক্রোসেকেন্ড যথার্থতার সাথে সময় পাওয়া যায় performance.nowHttps://developer.mozilla.org/en-US/docs/Web/API/Performance/ Now দেখুনডকুমেন্টেশনের জন্য ।

আমি নোড.জেএস এর উপর ভিত্তি করে এই ফাংশনটির একটি বাস্তবায়ন করেছি process.hrtime, যা আপনার প্রোগ্রামে দুটি পয়েন্টের মধ্যে সময় পার্থক্য গণনা করতে চাইলে তুলনামূলকভাবে কঠিন। Http://npmjs.org/package/performance- এখন দেখুন । বিশেষ হিসাবে, এই ফাংশনটি মিলি সেকেন্ডে সময় প্রতিবেদন করে তবে এটি সাব-মিলিসেকেন্ড যথার্থতার সাথে একটি ভাসা।

এই মডিউলের ২.০ সংস্করণে, নোড প্রক্রিয়াটি ( Date.now() - (process.uptime() * 1000)) শুরু হওয়ার পরে রিপোর্ট করা মিলিসেকেন্ডগুলি সম্পর্কিত । আপনি যদি অনুরূপ টাইমস্ট্যাম্প চান তবে আপনাকে ফলাফলটিতে এটি যুক্ত করতে হবে Date.now()। এছাড়াও মনে রাখবেন যে আপনার প্রতিদানটি বার করা উচিত Date.now() - (process.uptime() * 1000)। উভয় Date.nowএবং process.uptimeসুনির্দিষ্ট পরিমাপের জন্য অত্যন্ত অবিশ্বাস্য।

মাইক্রোসেকেন্ডে বর্তমান সময় পেতে, আপনি এই জাতীয় কিছু ব্যবহার করতে পারেন।

var loadTimeInMS = Date.now()
var performanceNow = require("performance-now")
console.log((loadTimeInMS + performanceNow()) * 1000)

আরও দেখুন: জাভাস্ক্রিপ্ট একটি উচ্চ রেজোলিউশন টাইমার সরবরাহ করে?


27
এটি লক্ষ করা উচিত যে একটি বেঞ্চমার্কটি করতে আপনি process.hrtime()একটি ভিন্নতা পেতে পূর্ববর্তী কলটির ফলাফলটি পাস করতে পারেন । যেমন var startTime = process.hrtime();এবং তারপর var diff = process.hrtime(startTime);
জাস্টিন ওয়ার্কেন্টিন

5
সেকেন্ডগুলিকে মাইক্রোসেকেন্ডে রূপান্তর করার সময় দয়া করে সময় ইউনিটগুলি পরীক্ষা করুন। কনসোল.লগ (এইচটিটাইম [0] * 1000000 + এইচআরটাইম [1] / 1000)
আইটিএফ্রেনকেলে

এই ত্রুটিটি দেখানোর জন্য ধন্যবাদ, এটিফ্রেনেল! আমি রূপান্তর কোড সংশোধন করেছি।
মের্ন স্টল 16'9

4
না করা উচিত require("performance.now")হবে require("performance-now")?
আপট্রিউক

6
process.hrtime()বর্তমান সময় ফিরে না।

21
now('milli'); //  120335360.999686
now('micro') ; // 120335360966.583
now('nano') ; //  120335360904333

পরিচিত যে now:

const now = (unit) => {

  const hrTime = process.hrtime();

  switch (unit) {

    case 'milli':
      return hrTime[0] * 1000 + hrTime[1] / 1000000;

    case 'micro':
      return hrTime[0] * 1000000 + hrTime[1] / 1000;

    case 'nano':
      return hrTime[0] * 1000000000 + hrTime[1];

    default:
      return now('nano');
  }

};

15
process.hrtime()বর্তমান সময় ফিরে না।

কোন ওস আপনার আছে?
আব্দেন্নুর টুমি

সতর্কতা: "মাইক্রো" এবং "ন্যানো" উভয়ই দেখে মনে হচ্ছে তারা সংখ্যার উপচে পড়বে। তাদের কাজ করার জন্য আপনাকে প্রথমে এগুলিকে বিগইন্টে রূপান্তর করতে হতে পারে।
ডুমগুবার

14

BigIntডাটা টাইপ Node.js 10.7.0 যেহেতু সমর্থিত। ( তাও দেখতে ব্লগ পোস্টে ঘোষণা )। নোড.জেএস এর এই সমর্থিত সংস্করণগুলির জন্য, process.hrtime([time])পদ্ধতিটি এখন 'উত্তরাধিকার' হিসাবে বিবেচনা করা হয়, process.hrtime.bigint()পদ্ধতিটির পরিবর্তে ।

bigintসংস্করণ process.hrtime()একটি বর্তমান উচ্চ রিসোলিউশনের রিয়েল টাইমে ফিরে পদ্ধতি bigint

const start = process.hrtime.bigint();
// 191051479007711n

setTimeout(() => {
  const end = process.hrtime.bigint();
  // 191052633396993n

  console.log(`Benchmark took ${end - start} nanoseconds`);
  // Benchmark took 1154389282 nanoseconds
}, 1000);

tl; ডা

  • নোড.জেএস 10.7.0+ - ব্যবহার করুন process.hrtime.bigint()
  • অন্যথায় - ব্যবহার করুন process.hrtime()

8

এছাড়াও https://github.com/wadey/node-microtime রয়েছে :

> var microtime = require('microtime')
> microtime.now()
1297448895297028

ওপি জানিয়েছে যে তারা এই প্যাকেজটি চেষ্টা করেছে এবং এটি ইনস্টল করতে পারেনি।
ক্যামেরন ট্যাকলিন্ড

@ ক্যামেরনট্যাকলিন্ড আহ তারা সত্যই করেছে - তারা এটিকে একটি 'এক্সটেনশন' বলে অভিহিত করেছে; যা আমাকে এটি মিস করেছে যেহেতু প্রচুর লোকেরা এই নিবন্ধটিতে প্রশ্নের মাধ্যমে আসে - যা নোডে মাইক্রোটাইম কীভাবে করা যায় - উত্তরটি এখনও কার্যকর।
মাইকম্যাকানা

5

নোড.জেএস ন্যানোটাইমার

আমি এর উপরে নোড.জেএস এর জন্য একটি মোড়ক লাইব্রেরি / অবজেক্ট লিখেছি process.hrtime ফাংশন কলের । এটিতে সময় মত সিঙ্ক্রোনাস এবং অ্যাসিনক্রোনাস টাস্কগুলির মতো দরকারী কার্য রয়েছে যা সেকেন্ডে, মিলিসেকেন্ড, মাইক্রো বা এমনকি ন্যানোতে নির্দিষ্ট করা হয়েছে এবং জাভাস্ক্রিপ্ট টাইমারটিতে তৈরির বাক্য গঠনটি অনুসরণ করে যাতে পরিচিত হতে পারে।

টাইমার অবজেক্টগুলিও পৃথক, যাতে আপনি যতটা চান তার প্রত্যেকটি তাদের নিজস্ব setTimeoutবা setIntervalপ্রক্রিয়াধীন অবস্থায় রাখতে পারেন।

একে ন্যানোটাইমার বলে । এটা দেখ!


2

এর চেয়ে আরও নির্ভুলতার সাথে কাজ করতে Date.now()তবে ফ্লোট নির্ভুলতায় মিলিসেকেন্ড সহ:

function getTimeMSFloat() {
    var hrtime = process.hrtime();
    return ( hrtime[0] * 1000000 + hrtime[1] / 1000 ) / 1000;
}

4
প্রক্রিয়া। রাইটটাইম () বর্তমান সময়টি ফেরায় না
মার্ক জে শ্মিট

তুমি ঠিক বলছো. দস্তাবেজগুলি থেকে: "এই সময়গুলি অতীতের একটি স্বেচ্ছাসেবী সময়ের সাথে সম্পর্কিত, এবং দিনের সময়ের সাথে সম্পর্কিত নয় এবং তাই ক্লক ড্রিফ্টের সাপেক্ষ নয় The প্রাথমিক ব্যবহারটি বিরতিগুলির মধ্যে পারফরম্যান্স পরিমাপের জন্য" নোডজেএস.আর.অর্গ / অ্যাপি / প্রসেস .html # প্রক্রিয়া_প্রক্রিয়া_হ্রটাইম_টাইম
রস

1

hrtimeএক লাইনে একক সংখ্যা হিসাবে পান :

const begin = process.hrtime();
// ... Do the thing you want to measure
const nanoSeconds = process.hrtime(begin).reduce((sec, nano) => sec * 1e9 + nano)

Array.reduce, যখন একটি একক যুক্তি দেওয়া হয়, অ্যারের প্রথম উপাদানটিকে প্রাথমিক accumulatorমান হিসাবে ব্যবহার করবে । একজন 0প্রাথমিক মান হিসাবে ব্যবহার করতে পারে এবং এটি পাশাপাশি কাজ করবে তবে অতিরিক্ত কেন করবে * 0


0

এনটিএম প্যাকেজগুলি রয়েছে যা সিস্টেম গেটটাইমডে () ফাংশনে আবদ্ধ হয়, যা লিনাক্সে একটি মাইক্রোসেকেন্ড যথার্থ টাইমস্ট্যাম্প দেয়। এনপিএম অনুসন্ধান করুন gettimeofday। কলিং সি এর চেয়ে দ্রুতprocess.hrtime()


0

দ্রুত বোঝার জন্য পুনর্লিখন:

const hrtime = process.hrtime();     // [0] is seconds, [1] is nanoseconds

let nanoSeconds = (hrtime[0] * 1e9) + hrtime[1];    // 1 second is 1e9 nano seconds
console.log('nanoSeconds:  ' + nanoSeconds);
//nanoSeconds:  97760957504895

let microSeconds = parseInt(((hrtime[0] * 1e6) + (hrtime[1]) * 1e-3));
console.log('microSeconds: ' + microSeconds);
//microSeconds: 97760957504

let milliSeconds = parseInt(((hrtime[0] * 1e3) + (hrtime[1]) * 1e-6));
console.log('milliSeconds: ' + milliSeconds);
//milliSeconds: 97760957

সূত্র: https://nodejs.org/api/process.html#process_process_hrtime_time


0

আমি এই সমাধানটি নিয়ে তেমন গর্বিত নই তবে আপনি এইভাবে মাইক্রোসেকেন্ড বা ন্যানোসেকেন্ডে টাইমস্ট্যাম্প রাখতে পারেন :

const microsecond = () => Number(Date.now() + String(process.hrtime()[1]).slice(3,6))
const nanosecond = () => Number(Date.now() + String(process.hrtime()[1]).slice(3))

// usage
microsecond() // return 1586878008997591
nanosecond()  // return 1586878009000645600

// Benchmark with 100 000 iterations
// Date.now: 7.758ms
// microsecond: 33.382ms
// nanosecond: 31.252ms

জানি যে:

  • এই সমাধানটি node.js এর সাথে একচেটিয়াভাবে কাজ করে ,
  • এই সম্পর্কে কি 3 থেকে 10 গুণ ধীর চেয়েDate.now()
  • আজবভাবে, এটি খুব নির্ভুল বলে মনে হচ্ছে, এইচটিটাইম ঠিক জেএস টাইমস্ট্যাম্প টিকগুলি অনুসরণ করে।
  • আপনি প্রতিস্থাপন করতে পারেন Date.now()দ্বারা Number(new Date())মিলিসেকেন্ডে টাইমস্ট্যাম্প পেতে

সম্পাদনা করুন:

কমা সহ মাইক্রোসেকেন্ড থাকার একটি সমাধান এখানে, তবে সংখ্যাটি সংস্করণ জাভাস্ক্রিপ্ট দ্বারা স্থানীয়ভাবে গোল করা হবে। সুতরাং আপনি যদি প্রতিবার একই ফর্ম্যাটটি চান তবে আপনার স্ট্রিং সংস্করণটি ব্যবহার করা উচিত।

const microsecondWithCommaString = () => (Date.now() + '.' + String(process.hrtime()[1]).slice(3,7))
const microsecondWithComma = () => Number(Date.now() + '.' + String(process.hrtime()[1]).slice(3,7))

microsecondWithCommaString() // return "1586883629984.8997"
microsecondWithComma() // return 1586883629985.966

0

প্রসেসরথটাইম () বর্তমান টিএস দেবেন না।

এই কাজ করা উচিত.

 const loadNs       = process.hrtime(),
        loadMs       = new Date().getTime(),
        diffNs       = process.hrtime(loadNs),
        microSeconds = (loadMs * 1e6) + (diffNs[0] * 1e9) + diffNs[1]

  console.log(microSeconds / 1e3)

-8

উত্তম?

Number(process.hrtime().join(''))

4
এটি মোটেই কাজ করে না। ব্যবহার করবেন না. যেহেতু এই মানগুলি পূর্ণসংখ্যা তাই অ্যারের দ্বিতীয় উপাদানটির কোনও নির্দিষ্ট প্রস্থ কখনও থাকতে পারে না। শীর্ষস্থানীয় শূন্যগুলি স্ট্রিং হিসাবে যোগদানের জন্য সেখানে নেই।
user.friendly

সংখ্যা (প্রক্রিয়া। রাইটটাইম ()। মানচিত্র ((n, i) => আই? ('000000000' + এন)। স্লাইস (-9): এন) .জইন (''))
মাইক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.