কার্যকর করতে কোনও ফাংশন দ্বারা নেওয়া সময় কীভাবে পরিমাপ করা যায়


1188

আমার কার্যকর হওয়ার সময়টি মিলি সেকেন্ডে পাওয়া দরকার।

আমি মূলত ২০০৮ সালে এই প্রশ্নটি জিজ্ঞাসা করেছি। তখন গ্রহণযোগ্য উত্তরটি ছিল নতুন তারিখ () .গেটটাইম () তবে, আমরা সকলেই এখন একমত হতে পারি যে স্ট্যান্ডার্ড পারফরম্যান্স.নো () এপিআই ব্যবহার করা আরও উপযুক্ত। অতএব আমি এইটির গ্রহণযোগ্য উত্তরটি পরিবর্তন করছি।


3
ফাঁসির সময় দিয়ে আপনি কী সম্পাদন করতে চাইছেন সে সম্পর্কে একটি বিবৃতি কেবলমাত্র প্রশ্নের উত্তর দেওয়ার চেয়ে অনেক বেশি কার্যকর হতে পারে। আজকাল, ফায়ারব্যাগ বা ক্রোম দেব সরঞ্জামগুলিতে প্রোফাইলিং ব্যবহার করা প্রায়শই আপনার সিপু জুস চুষছে এমন কোড সন্ধান করার অনেক বেশি ভাল উপায়।
অলিগোফ্রেন 10

এখানে আপনি এটি কীভাবে ক্লাসিক Dateপদ্ধতিতে করতে পারেন , যা আপনাকে দেয় msএবং বেশিরভাগ ক্ষেত্রেই যথেষ্ট বলে আমি মনে করি albertech.blogspot.com/2015/07/… ... তবে হ্যাঁ আপনার সত্যিই নজর দেওয়া উচিতPerformance.now
জার

5
performance.now()নোডে কাজ করে না। new Date().getTime()নোডে কাজ করবে
রায়ান ওয়াকার

1
সংখ্যা 1000 upvote Wop Wop: D
Kiksen

1
@ অলিগোফ্রেন - কখনও কখনও আপনি এই ডেটা ক্যাপচার করতে চাইতে পারেন। আমার একটি পরিস্থিতি আছে যেখানে আমি এটি লিখছি ইনডেক্সডডিবি
টমাসরোনস

উত্তর:


1753

পারফরম্যান্স ব্যবহার করুন। এখন () :

var t0 = performance.now()

doSomething()   // <---- The function you're measuring time for 

var t1 = performance.now()
console.log("Call to doSomething took " + (t1 - t0) + " milliseconds.")

NodeJs: এটি ক্লাস আমদানিperformance করা প্রয়োজন


কনসোল.টাইম ব্যবহার :(অ-মান)( জীবনযাত্রার মান )

console.time('someFunction')

someFunction() // Whatever is timed goes between the two "console.time"

console.timeEnd('someFunction')

দ্রষ্টব্য :
স্ট্রিংটি পাস করার সময়time()এবংtimeEnd()পদ্ধতিগুলি অবশ্যই মিলবে
( টাইমারকে প্রত্যাশা অনুযায়ী শেষ করতে হবে)।

console.time() নথি:

  1. সম্পর্কিত নোডজেএস ডকুমেন্টেশন
  2. এমডিএন (ক্লায়েন্ট-সাইড) ডকুমেন্টেশন

27
এটি এখন ক্রোম বিকাশকারী সরঞ্জাম দ্বারা সমর্থিত।
জুলিয়েন_সি

3
আমি যা বুঝি তার থেকে সঠিক সময় সংগ্রহের জন্য এটি বর্তমানে সেরা উপায়।
অ্যাশ ব্লু

6
আপনি কি এই দুটি বিবৃতি মধ্যে ফাংশন সম্পাদন প্রয়োজন? আপনি এখন এটি নির্ধারণ করতে সময় নেয় এটি নির্ধারণ করতে নয়, এটি পরিমাপ করুন। আমি ভুল হলে আমাকে সংশোধন করুন ...
ক্রিশ্চিয়ান

2
এই বৈশিষ্ট্যটি সম্পর্কে MDN নিবন্ধটির লিঙ্ক: বিকাশকারী.মোজিলা.আর.ইন.ইউএস
ডকস

6
হ্যাঁ আপনি `টোটালটাইম + = কনসোল.টাইমএন্ড ('টাইমার') 'করতে এবং প্রতিটি টাইমারের জন্য এটি করতে পারেন
vsync

637

ব্যবহার নতুন তারিখ ()। getTime ()

গেটটাইম () পদ্ধতিটি 1 ই জানুয়ারী, 1970 এর মধ্যরাত থেকে মিলিসেকেন্ডগুলির সংখ্যা প্রদান করে।

প্রাক্তন।

var start = new Date().getTime();

for (i = 0; i < 50000; ++i) {
// do something
}

var end = new Date().getTime();
var time = end - start;
alert('Execution time: ' + time);

9
নোট করুন যে আপনি গেটটাইম () কলটির জন্য + নতুন তারিখ () প্রতিস্থাপন করতে পারেন: var start = + new তারিখ (); // কর স্টাফ সতর্কতা ("কার্যকর সময়:" + (+ নতুন তারিখ ()) - শুরু);
জে সি

55
সময় সঠিক নয় কারণ তারিখটি এই কার্যকারিতার জন্য নয়। আমি এখানে সাহসী হতে চলেছি এবং বলছি আপনি সঠিক সময় চাইলে আপনার ভিসিএনসি উদাহরণ ব্যবহার করা উচিত। যদিও এটি কেবল ক্রোম এবং ফায়ারফক্স এটিএম এ কাজ করে।
অ্যাশ ব্লু

9
সাবধান, গেটমিলিসেকেন্ডস () আপনাকে বর্তমান সেকেন্ডের মিলিসেকেন্ড ভগ্নাংশ দেয়। যদি আপনি getTime () getMilliseconds () এর সাথে প্রতিস্থাপন করেন তবে আপনি যদি দ্বিতীয়টি অতিক্রম করেন তবে আপনি নেতিবাচক ফলাফল পেতে পারেন।
রিকিএ

6
আজকের স্ট্যান্ডার্ডগুলির দ্বারা vsync দ্বারা উত্তর অনেক বেশি সঠিক, এবং তারিখ () ব্যবহারের ফলে খুব ভ্রান্ত ফলাফল প্রকাশিত হতে পারে, বিশেষত উইন্ডোজ প্ল্যাটফর্মে যেখানে ফলাফলগুলি গোল করে + নিকটতম 15 মিমি সীমানায় সজ্জিত করা যায়, ফলস্বরূপ অদ্ভুত জিনিস যেমন ক্ষুদ্র কোড বিটগুলিতে 0 মিমি সময়সীমা।
অলিগোফরেন

29
@ অ্যাশ ব্লু, আমাদের ব্যবহার করা উচিত window.performance.now। দেখুন stackoverflow.com/a/15641427/632951
Pacerier

405

তারিখ () ব্যবহার করবেন না। নীচের পড়া.

ব্যবহারperformance.now() :

<script>
var a = performance.now();
alert('do something...');
var b = performance.now();
alert('It took ' + (b - a) + ' ms.');
</script>

এটি কাজ করে:

  • IE 10 ++

  • ফায়ারফক্স 15 ++

  • ক্রোম 24 ++

  • সাফারি 8 ++

  • অপেরা 15 ++

  • Android 4.4 ++

  • ইত্যাদি

console.timeআপনার পক্ষে কার্যকর হতে পারে তবে এটি মানহীন § :

এই বৈশিষ্ট্যটি মানহীন এবং মানক ট্র্যাকের নয়। এটি ওয়েবের মুখোমুখি উত্পাদন সাইটগুলিতে ব্যবহার করবেন না: এটি প্রতিটি ব্যবহারকারীর পক্ষে কাজ করবে না। সেখানে আরো বাস্তবায়নের মধ্যে বৃহৎ অসামঞ্জস্যপূর্ণ হতে পারে এবং আচরণ ভবিষ্যতে পরিবর্তিত হতে পারে।

ব্রাউজার সমর্থন ছাড়াও, আরও খাঁটি সময় সরবরাহ performance.nowকরার সম্ভাবনা রয়েছে বলে মনে হয় এটি এর খালি-হাড়ের সংস্করণ বলে মনে হচ্ছে console.time


<ant> এছাড়াও, কোনও কিছুর জন্য কখনও ব্যবহার করবেন নাDate কারণ এটি "সিস্টেমের সময়" এর পরিবর্তনের দ্বারা প্রভাবিত। যার অর্থ আমরা অবৈধ ফলাফলগুলি পেয়ে যাব - যেমন "নেতিবাচক সময়" - যখন ব্যবহারকারীর একটি সঠিক সিস্টেম সময় না থাকে:

অক্টোবর 2014, আমার সিস্টেম ঘড়ি বিক্ষিপ্তচিত্ত গিয়েছিলাম এবং কি অনুমান .... আমি Gmail খুলে দেখল সব "পাঠানো আমার দিনের ইমেইলের 0 মিনিট আগে "। এবং আমি ভেবেছিলাম গুগল থেকে বিশ্বমানের ইঞ্জিনিয়াররা জিমেইল তৈরি করার কথা আছে .......

(আপনার সিস্টেমের ঘড়িটি এক বছর আগে সেট করুন এবং জিমেইলে যান যাতে আমরা সকলে খুব ভাল হাসি পারি Perhaps সম্ভবত কোনও দিন আমরা জেএসের জন্য একটি হল অফ লজ্জা পাব Date))

গুগল স্প্রেডশিটের now()ফাংশনও এই সমস্যায় ভুগছে।

আপনি Dateযখন ব্যবহারকারীকে তার সিস্টেম ঘড়ির সময় দেখাতে চান কেবল তখনই আপনি ব্যবহার করতে পারবেন । না যখন আপনি পেতে চান সময় বা পরিমাপ কিছু।


3
আমি কি খুঁজছিলাম! আমি একসাথে বেশ কয়েকবার যুক্ত করতে সক্ষম হতে চাই, কনসোল বার দিয়ে আসলেই তা করতে পারি না।
রায়

8
নোট করুন যে এটি এখনও সাফারিটিতে সমর্থিত নয়: developer.mozilla.org/en-US/docs/Web/API/Performance.now ()
আকোস কে

2
আমি ফায়ারব্যাগ প্রোফাইল এবং পারফরম্যান্স ব্যবহার করি now এখন () এবং তারা উভয়ই ভাল কাজ করে। পারফরম্যান্স.নো () প্রোফাইল থেকে আমার ফলাফলটি নিশ্চিত করে।
ভিনসেন্ট জিয়া

2
আমার বৃহত্তম হ্যাঙ্গআপে কাজ করে না, যা আই 7 (কর্পোরেট গ্রাহক) ch আমি ক্রোমে পারফরম্যান্স পরিমাপ করার বিষয়ে চিন্তা করি না, এটি সবসময় দ্রুত বজ্রপাত হয়।
নিক

2
এটি কনসোল.টাইম () এর পরে আরও ভাল উপায়।
সঞ্জীব

52

যদি আপনার স্থানীয় বিকাশ মেশিনে ফাংশন এক্সিকিউশন সময় পাওয়ার প্রয়োজন হয় তবে আপনি হয় আপনার ব্রাউজারের প্রোফাইলিং সরঞ্জামগুলি, বা কনসোল কমান্ড যেমন console.time()এবং এর জন্য ব্যবহার করতে পারেন console.timeEnd()

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

আপনার জাভাস্ক্রিপ্ট প্রোফাইল করতে:

  • ইন ক্রোম , প্রেস F12 চেপে নির্বাচন প্রোফাইল TAB, এরপরে সংগ্রহ জাভাস্ক্রিপ্ট CPU- র প্রোফাইল
  • ইন ফায়ারফক্স ইনস্টল / ওপেন ফায়ারবাগকে, এবং এর উপর ক্লিক প্রোফাইল বোতাম।
  • ইন ইন্টারনেট 9+ , প্রেস F12 চেপে এ ক্লিক করুন স্ক্রিপ্ট বা প্রোফাইলার (আইই সংস্করণটি উপর নির্ভর করে)।

বিকল্পভাবে, আপনার বিকাশ মেশিনে , আপনি console.time()এবং সাথে আপনার কোডে উপকরণ যুক্ত করতে পারেন console.timeEnd()। ফায়ারফক্স ১১ +, ক্রোম 2 + এবং আইআই ১১ + এ সমর্থিত এই ফাংশনগুলি টাইমারগুলির প্রতিবেদন করে যা আপনি শুরু / থামিয়ে দিয়েছিলেন console.time()time()ব্যবহারকারীর দ্বারা সংজ্ঞায়িত টাইমার নামটিকে আর্গুমেন্ট হিসাবে গ্রহণ করে এবং timeEnd()তারপরে টাইমার শুরুর পর থেকে সম্পাদনের সময় রিপোর্ট করে:

function a() {
  console.time("mytimer");
  ... do stuff ...
  var dur = console.timeEnd("myTimer"); // NOTE: dur only works in FF
}

মনে রাখবেন যে কেবল ফায়ারফক্স timeEnd()কলটিতে অতিবাহিত সময়টি ফেরত দেয় । অন্যান্য ব্রাউজারগুলি কেবল ফলাফলটিকে বিকাশকারী কনসোলে রিপোর্ট করে: এর ফিরতি মানটি timeEnd()সংজ্ঞায়িত।

আপনি যদি বুনোতে ফাংশন এক্সিকিউশন সময় পেতে চান তবে আপনাকে আপনার কোডটি ইনস্ট্রুমেন্ট করতে হবে। আপনার কাছে কয়েকটি বিকল্প রয়েছে। আপনি অনুসন্ধানের মাধ্যমে সহজভাবে শুরু এবং শেষ সময়গুলি সংরক্ষণ করতে পারেন new Date().getTime():

function a() {
  var start = new Date().getTime();
  ... do stuff ...
  var end = new Date().getTime();
  var dur = end - start;
}

তবে, Dateঅবজেক্টটিতে কেবল মিলিসেকেন্ড রেজোলিউশন রয়েছে এবং কোনও ওএসের সিস্টেমের ক্লক পরিবর্তন দ্বারা প্রভাবিত হবে। আধুনিক ব্রাউজারগুলিতে আরও ভাল বিকল্প রয়েছে।

ভালো বিকল্প ব্যবহার করা উচ্চ ঔজ্জ্বল্যতাময় সময় , ওরফে window.performance.now()। দুটি গুরুত্বপূর্ণ উপায়ে now()traditionalতিহ্যগত তুলনায় ভাল Date.getTime():

  1. now()সাবমিলিসেকেন্ড রেজোলিউশনের সাথে একটি ডাবল যা পৃষ্ঠার নেভিগেশন শুরুর পর থেকে মিলিসেকেন্ডগুলির সংখ্যা উপস্থাপন করে। এটি ভগ্নাংশে মাইক্রোসেকেন্ডগুলির সংখ্যা প্রদান করে (যেমন 1000.123 এর মান 1 সেকেন্ড এবং 123 মাইক্রোসেকেন্ড)।

  2. now()একঘেয়েমি বৃদ্ধি পাচ্ছে। সম্ভবত এটি পরবর্তী কলগুলিতে সামনের দিকে বা এমনকি পিছিয়ে Date.getTime()যেতে পারে হিসাবে এটি গুরুত্বপূর্ণ । উল্লেখযোগ্যভাবে, যদি ওএসের সিস্টেমের সময় আপডেট হয় (যেমন পারমাণবিক ক্লক সিঙ্ক্রোনাইজেশন), Date.getTime()আপডেট করা হয়। now()সর্বদা মনোটোনিকভাবে বৃদ্ধি পাওয়ার গ্যারান্টিযুক্ত, সুতরাং এটি ওএসের সিস্টেম সময় দ্বারা প্রভাবিত হয় না - এটি সর্বদা প্রাচীর-ঘড়ির সময় হবে (ধরে নেওয়া আপনার প্রাচীরের ঘড়িটি পারমাণবিক নয় ...)।

now()প্রায় প্রতিটি স্থান, যা ব্যবহার করা যেতে পারে new Date().getTime(), + new Dateandt Date.now()হয়। ব্যতিক্রমটি হ'ল Dateএবং now()সময়গুলি মেশে না, যেমন ইউনিক্স-এপোচ (1970 সাল থেকে মিলি সেকেন্ডের সংখ্যা) এর Dateউপর ভিত্তি করে , যখন আপনার পৃষ্ঠা নেভিগেশন শুরু হয়েছে তখন থেকে মিলি সেকেন্ডের সংখ্যা (সুতরাং এটি এর চেয়ে অনেক কম হবে )।now()Date

এখানে কীভাবে ব্যবহার করবেন তার একটি উদাহরণ now():

function a() {
  var start = window.performance.now();
   ... do stuff ...
  var end = window.performance.now();
  var dur = end - start;
}

now()Chrome স্থিতিশীল, ফায়ারফক্স 15+ এবং আই 10 তে সমর্থিত। এছাড়াও বেশ কয়েকটি পলিফিল পাওয়া যায়।

বুনোয় নির্বাহের সময় পরিমাপের জন্য অন্য একটি বিকল্প হ'ল ইউজারটাইমিং । ইউজারটাইমিং একইরকম আচরণ করে console.time()এবং console.timeEnd()তবে এটি একই উচ্চ রেজোলিউশন টাইমস্ট্যাম্পটি now()ব্যবহার করে যা ব্যবহার করে (যাতে আপনি একটি সাব-মিলিসেকেন্ড একঘেয়েভাবে বাড়ানো ঘড়ি পাবেন), এবং পারফরম্যান্স টাইমলাইনে টাইমস্ট্যাম্প এবং সময়সীমাগুলি সংরক্ষণ করে ।

ইউজারটাইমিংয়ে চিহ্নগুলির (টাইমস্ট্যাম্প) ধারণা এবং ব্যবস্থাগুলি (সময়কাল) রয়েছে) আপনি যতগুলি চান তার সংজ্ঞা দিতে পারেন এবং সেগুলি পারফরম্যান্স টাইমলাইনে প্রকাশিত হয়েছে ।

একটি টাইমস্ট্যাম্প সংরক্ষণ করতে, আপনি কল করুন mark(startMarkName)। আপনার প্রথম চিহ্ন থেকে সময়কাল পেতে, আপনি কেবল কল করেন measure(measurename, startMarkname)। সময়কালটি আপনার চিহ্নগুলির পাশাপাশি পারফরম্যান্স টাইমলাইনে সংরক্ষণ করা হয়।

function a() {
  window.performance.mark("start");
  ... do stuff ...
  window.performance.measure("myfunctionduration", "start");
}

// duration is window.performance.getEntriesByName("myfunctionduration", "measure")[0];

ইউজারটাইমিং IE10 + এবং Chrome25 + এ উপলব্ধ। একটি পলিফিলও পাওয়া যায় (যা আমি লিখেছিলাম)।


1
দুর্দান্ত এবং সর্বাধিক বর্তমান উত্তর আইএমএইচও :) এটি কিছুটা সম্পাদনা করে আরও ভাল হবে। আমি বলতে চাই যে ব্যবহারকারীর সময়জ্ঞান পরিমাপের জন্য "এক অন্য বিকল্প", কিন্তু নয় পছন্দের বিকল্পটি মাপকাঠিতে উন্নয়ন মেশিন নিজেই না সম্পন্ন করা হয়। আপনার পলিফিল দিয়ে এটি সমস্ত ব্রাউজার জুড়ে কাজ করে। এবং এর বিবরণ এবং বয়লারপ্লেটগুলি গোপন করে এবং এটি বিদ্যমান থাকার কারণ। performance.nowDate
10-10 এ হ্যাশচেঞ্জ

34

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

var performance = window.performance;
var t0 = performance.now();
doWork();
var t1 = performance.now();
console.log("Call to doWork took " + (t1 - t0) + " milliseconds.")

Date.getTime()বা console.time()সঠিক প্রয়োগের সময় পরিমাপের জন্য ভাল নয়। দ্রুত রুট অনুমান আপনার পক্ষে ঠিক থাকলে আপনি সেগুলি ব্যবহার করতে পারেন। মোটামুটি অনুমানের অর্থ আমার অর্থ আপনি আসল সময় থেকে 15-60 এমএস শিফট পেতে পারেন।

জাভাস্ক্রিপ্টে প্রয়োগের সময় পরিমাপ করার বিষয়ে এই উজ্জ্বল পোস্টটি পরীক্ষা করে দেখুন। লেখক জাভাস্ক্রিপ্ট সময়ের যথার্থতা সম্পর্কে কয়েকটি লিঙ্ক দিয়েছেন, পড়ার মতো।


খুব ভাল উত্তর! এটি আমাকে অনেক সাহায্য করেছে!
একত্রিত করুন

18

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


8
ভাল পরামর্শ তবে স্পষ্টতই কেবল এফএফের জন্য কাজ করে। আমরা প্রায়শই ব্রাউজারের গতির তুলনা করতে চাই ... :-)
ফিলিহো

3
নতুন ফায়ারবাক-এ তারা মেনুতে এই বিকল্পগুলি আড়াল করে CTRL + SHIFT + P বা কনসোল.প্রফাইল () ব্যবহার করে;
কনসোল..প্রফিলইন্ড

4
ক্রোম সমর্থন করে console.time()এবং console.timeEnd()এখনই।
জুলিয়ান_সি

12
var StopWatch = function (performance) {
    this.startTime = 0;
    this.stopTime = 0;
    this.running = false;
    this.performance = performance === false ? false : !!window.performance;
};

StopWatch.prototype.currentTime = function () {
    return this.performance ? window.performance.now() : new Date().getTime();
};

StopWatch.prototype.start = function () {
    this.startTime = this.currentTime();
    this.running = true;
};

StopWatch.prototype.stop = function () {
    this.stopTime = this.currentTime();
    this.running = false;
};

StopWatch.prototype.getElapsedMilliseconds = function () {
    if (this.running) {
        this.stopTime = this.currentTime();
    }

    return this.stopTime - this.startTime;
};

StopWatch.prototype.getElapsedSeconds = function () {
    return this.getElapsedMilliseconds() / 1000;
};

StopWatch.prototype.printElapsed = function (name) {
    var currentName = name || 'Elapsed:';

    console.log(currentName, '[' + this.getElapsedMilliseconds() + 'ms]', '[' + this.getElapsedSeconds() + 's]');
};

মাপকাঠি

var stopwatch = new StopWatch();
stopwatch.start();

for (var index = 0; index < 100; index++) {
    stopwatch.printElapsed('Instance[' + index + ']');
}

stopwatch.stop();

stopwatch.printElapsed();

আউটপুট

Instance[0] [0ms] [0s]
Instance[1] [2.999999967869371ms] [0.002999999967869371s]
Instance[2] [2.999999967869371ms] [0.002999999967869371s]
/* ... */
Instance[99] [10.999999998603016ms] [0.010999999998603016s]
Elapsed: [10.999999998603016ms] [0.010999999998603016s]

পারফরমেন্স.নো () optionচ্ছিক - কেবল স্টপওয়াচ কনস্ট্রাক্টর ফাংশনে মিথ্যা পাস pass


12

প্রক্রিয়া। রাইটটাইম () নোড.জেএস এর মধ্যে উপলব্ধ - এটি ন্যানোসেকেন্ডে একটি মান দেয়

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

1
যদি আপনি এটি প্রস্তাবিত মাইক্রোসেকেন্ড ই -6 এর পরিবর্তে এমএস ই -3 তে রূপান্তর করেন: hrtime[0] * 1000 + hrtime[1] / 1000000-> হ্যাঁ, আমি বরং এটি ব্যবহার করি var hrtime! : পি
ক্রেগোক্স

11

আপনি এখানে অ্যাড অপারেটর ব্যবহার করতে পারেন

 var start = +new Date();
 callYourFunctionHere();
 var end = +new Date();
 var time = end - start;
 console.log('total execution time = '+ time + 'ms');

8

সময় ফিরিয়ে দেওয়ার ক্ষমতা রাখার জন্য ভিএসএনসি কোডটি আরও প্রসারিত করতে এবং নোডজেএসে একটি মান হিসাবে কোডটির এই সামান্য অংশটি ব্যবহার করুন।

console.timeEndValue = function(label) { // Add console.timeEndValue, to add a return value
   var time = this._times[label];
   if (!time) {
     throw new Error('No such label: ' + label);
   }
   var duration = Date.now() - time;
   return duration;
};

এখন কোডটি এর মতো ব্যবহার করুন:

console.time('someFunction timer');

someFunction();

var executionTime = console.timeEndValue('someFunction timer');
console.log("The execution time is " + executionTime);


এটি আপনাকে আরও সম্ভাবনা দেয়। আপনি কার্যকরকরণের সময়টিকে আরও বেশি কাজের জন্য যেমন সমীকরণে ব্যবহার করা বা কোনও ডাটাবেসে সংরক্ষণ করা, ওয়েবসকেটের উপরে কোনও দূরবর্তী ক্লায়েন্টকে পাঠানো, ওয়েবপৃষ্ঠায় পরিবেশন করা ইত্যাদি সংরক্ষণ করতে পারেন etc.


8

শুধুমাত্র একটি ভেরিয়েবল ব্যবহার করা সম্ভব:

var timer = -performance.now();

// Do something

timer += performance.now();
console.log("Time: " + (timer/1000).toFixed(5) + " sec.")

timer/1000 - মিলিসেকেন্ডগুলিকে সেকেন্ডে রূপান্তর করতে

.toFixed(5) - অতিরিক্ত অঙ্ক ছাঁটাই করতে


5

যেহেতু console.timeএবং performance.nowকয়েকটি বড় ব্রাউজারগুলিতে সমর্থিত নয় (যেমন IE10), তাই আমি একটি স্লিম ইউটিলিটি তৈরি করেছি যা সেরা উপলব্ধ পদ্ধতিগুলি ব্যবহার করে। যাইহোক, এটা মিথ্যা ব্যবহারগুলির (কলিং জন্য ত্রুটি পরিচালনা অভাব আছে End()একটি সক্রিয়া না টাইমার তে) খুলুন।

এটি ব্যবহার করুন এবং আপনি চান হিসাবে এটি উন্নতি।

Performance: {
    Timer: {},
    Start: function (name) {
        if (console && console.time) {
            console.time(name);
        } else if (window.performance.now) {
            this.Timer[name] = window.performance.now();
        } else {
            this.Timer[name] = new Date().getTime();
        }
    },
    End: function (name) {
        if (console && console.time) {
            console.timeEnd(name);
        } else {
            var result;
            if (window.performance.now) {
                result = window.performance.now() - this.Timer[name];
            } else {
                result = new Date().getTime() - this.Timer[name];
            }
            console.log(name + ": " + result);
        }
    }
}

5

এটি আপনাকে সাহায্য করতে পারে।

var t0 = date.now(); doSomething(); var t1 = date.now(); console.log("Call to doSomething took approximate" + (t1 - t0)/1000 + " seconds.")


1
যদিও এই কোড স্নিপেট একটি ব্যাখ্যা সহ প্রশ্নটি সমাধান করতে পারে, সত্যিই আপনার পোস্টের মান উন্নত করতে সহায়তা করে। মনে রাখবেন যে আপনি ভবিষ্যতে পাঠকদের জন্য প্রশ্নের উত্তর দিচ্ছেন, এবং সেই লোকেরা আপনার কোড পরামর্শের কারণগুলি জানেন না। আপনার কোডটি ব্যাখ্যামূলক মন্তব্যে ভিড় না করার চেষ্টা করুন, এটি কোড এবং ব্যাখ্যা উভয়ের পাঠযোগ্যতা হ্রাস করে!
ফিলিওর

5

সময় কার্যকারিতা জন্য এখানে একটি সজ্জা

let timed = (f) => (...args)=>{
    let start = performance.now();
    let ret = f(...args);
    console.log(`function ${f.name} took ${(performance.now()-start).toFixed(3)}ms`)
    return ret;   
}

ব্যবহার:

let test = ()=>{/*does something*/}
test = timed(test)   // turns the function into a timed function in one line
test()               // run your code as normal, logs 'function test took 1001.900ms' 

আপনি যদি অ্যাসিঙ্ক ফাংশন ব্যবহার করে থাকেন তবে আপনি অ্যাসিঙ্ক তৈরি করতে পারেন timedএবং awaitচ (... আরগস) এর আগে একটি যুক্ত করতে পারেন এবং এটির জন্য এটি কাজ করা উচিত। আপনি যদি কোনও সজ্জাকারক উভয় সিঙ্ক এবং অ্যাসিঙ্ক ফাংশন পরিচালনা করতে চান তবে এটি আরও জটিল হয়ে ওঠে।


আমি ঠিক এটিই খুঁজছিলাম। ধন্যবাদ!
অ্যান্ড্রু ওয়াটার্স

এ্যাসিঙ্ক ফাংশনগুলি ব্যবহার করে এটি সর্বজনীন করার কোনও উপায় আছে কি?
টোটালএএমডি

4

ধন্যবাদ, আছিম কোয়েলনার আপনার উত্তরটি কিছুটা প্রসারিত করবে:

var t0 = process.hrtime();
//Start of code to measure

//End of code
var timeInMilliseconds = process.hrtime(t0)[1]/1000000; // dividing by 1000000 gives milliseconds from nanoseconds

দয়া করে নোট করুন, আপনি যা পরিমাপ করতে চান তার চেয়ে আলাদা কিছু করা উচিত নয় (উদাহরণস্বরূপ, কার্যকর console.logকরতে সময়ও লাগবে এবং পারফরম্যান্স টেস্টগুলিকে প্রভাবিত করবে)।

দ্রষ্টব্য, অ্যাসিক্রোনাস ফাংশন সম্পাদনের সময় পরিমাপের জন্য, আপনার var timeInMilliseconds = process.hrtime(t0)[1]/1000000;কলব্যাকের ভিতরে প্রবেশ করা উচিত । উদাহরণ স্বরূপ,

var t0 = process.hrtime();
someAsyncFunction(function(err, results) {
var timeInMilliseconds = process.hrtime(t0)[1]/1000000;

});

3

কয়েক মাস আগে আমি আমার নিজস্ব রুটিন একসাথে রেখেছি যা ডেট.নো () ব্যবহার করে একটি ফাংশনকে বার করে দেয় - যদিও সেই সময় স্বীকৃত পদ্ধতিটি পারফরম্যান্স বলে মনে হয়েছিল (এখন) - কারণ পারফরম্যান্স অবজেক্ট এখনও উপলব্ধ নেই (বিল্ট -ইন) স্থিতিশীল নোড.জেএস রিলিজে।

আজ আমি আরও কিছু গবেষণা করছিলাম এবং সময় দেওয়ার জন্য অন্য একটি পদ্ধতি খুঁজে পেয়েছি। যেহেতু আমি এটি নোড.জেএস কোডে কীভাবে ব্যবহার করব তাও আমি খুঁজে পেয়েছি here

নীচে w3c এবং নোড.জেএস দ্বারা প্রদত্ত উদাহরণগুলি থেকে মিলিত হয়েছে :

function functionTimer() {
    performance.mark('start')
    functionToBeTimed()
    performance.mark('end')
    performance.measure('Start to End', 'start', 'end')
    const measure = performance.getEntriesByName('Start to End')[0]
    console.log(measure.duration)
}

বিঃদ্রঃ:

যদি আপনি performanceকোনও নোড.জেএস অ্যাপ্লিকেশনটিতে এই অবজেক্টটি ব্যবহার করতে চান তবে আপনাকে অবশ্যই নিম্নলিখিতগুলি অন্তর্ভুক্ত করতে হবে: const { performance } = require('perf_hooks')


আমি মনে করি আপনার performance.mark('end')এই ক্ষেত্রে দরকার নেই
কোফিফস

2

এই লক্ষ্য অর্জনের একাধিক উপায় রয়েছে:

  1. কনসোল.টাইম ব্যবহার করে

    console.time('function');
    //run the function in between these two lines for that you need to 
    //measure time taken by the function. ("ex. function();")
    console.timeEnd('function');
  2. এটি সর্বাধিক দক্ষ উপায়: পারফরম্যান্স.উন () ব্যবহার করে , যেমন

    var v1 = performance.now();
    //run the function here for which you have top measure the time 
    var v2 = performance.now();
    console.log("total time  taken = "+(v2-v1)+"milliseconds");
  3. + (অপারেটর যোগ করুন) বা গেটটাইম () ব্যবহার করুন

    var h2 = +new Date(); //or
    var h2 = new Date().getTime();
    for(i=0;i<500;i++) { /* do something */}
    var h3 = +new Date();   //or 
    var h3 = new Date().getTime();
    var timeTaken = h3-h2;
    console.log("time ====", timeTaken);

আপনি কোনও তারিখের উদাহরণে আনরি প্লাস অপারেটর প্রয়োগ করলে কী হয় তা এখানে: প্রশ্নে থাকা তারিখের মানটি এটিকে একটি সংখ্যায় রূপান্তর করুন

দ্রষ্টব্য: getTime()অ্যানারি + অপারেটরের চেয়ে ভাল পারফরম্যান্স দেয়।


1
export default class Singleton {

  static myInstance: Singleton = null;

  _timers: any = {};

  /**
   * @returns {Singleton}
   */
  static getInstance() {
    if (Singleton.myInstance == null) {
      Singleton.myInstance = new Singleton();
    }

    return this.myInstance;
  }

  initTime(label: string) {
    this._timers[label] = Date.now();
    return this._timers[label];
  }

  endTime(label: string) {
    const endTime = Date.now();
    if (this._timers[label]) {
      const delta = endTime - this._timers[label];
      const finalTime = `${label}: ${delta}ms`;
      delete this._timers[label];
      return finalTime;
    } else {
      return null;
    }
  }
}

ইনিশটাইম সম্পর্কিত string

return Singleton.getInstance().initTime(label); // Returns the time init

return Singleton.getInstance().endTime(label); // Returns the total time between init and end


1

আপনি যদি একাধিক জিনিসের মধ্যে সময় নির্ধারণ করতে চান যা নেস্টেড নয় আপনি এটি ব্যবহার করতে পারেন:

function timer(lap){ 
    if(lap) console.log(`${lap} in: ${(performance.now()-timer.prev).toFixed(3)}ms`); 
    timer.prev = performance.now();
}

কনসোল.টাইম () এর মতো, তবে আপনার যদি আগের টাইমারগুলির ট্র্যাক রাখতে না হয় তবে সহজ ব্যবহার।

আপনি যদি কনসোল.টাইম () থেকে নীল রঙ পছন্দ করেন তবে পরিবর্তে আপনি এই লাইনটি ব্যবহার করতে পারেন

console.log(`${lap} in: %c${(performance.now()-timer.prev).toFixed(3)}ms`, 'color:blue');

// Usage: 
timer()              // set the start
// do something 
timer('built')       // logs 'built in: 591.815ms'
// do something
timer('copied')      // logs 'copied in: 0.065ms'
// do something
timer('compared')    // logs 'compared in: 36.41ms'

1

আমার ক্ষেত্রে, আমি @ ব্যাকরণ সুগার ব্যবহার করে বাবেল দিয়ে এটি সংকলন করতে পারছি।
এই পদ্ধতির সমস্যাটি হ'ল ফাংশনটির অভ্যন্তরীণ বস্তু থাকতে হয়।

নমুনা জেএস কোড

function timer() {
    return (target, propertyKey, descriptor) => {
        const start = Date.now();
        let oldFunc = descriptor.value;

        descriptor.value = async function (){
            var result = await oldFunc.apply(this, arguments);
            console.log(Date.now() - start);
            return result;
        }
    }
}

// Util function 
function delay(timeout) {
    return new Promise((resolve) => setTimeout(() => {
        resolve();
    }, timeout));
}

class Test {
    @timer()
    async test(timout) {
        await delay(timout)
        console.log("delay 1");
        await delay(timout)
        console.log("delay 2");
    }
}

const t = new Test();
t.test(1000)
t.test(100)

.babelrc (বাবেল 6 এর জন্য)

 {
    "plugins": [
        "transform-decorators-legacy"
    ]
 }

1

संचयी চক্র সহ স্টপওয়াচ

সার্ভার এবং ক্লায়েন্ট (নোড বা ডোম) এর সাথে কাজ করে, Performanceএপিআই ব্যবহার করে । যখন আপনার অনেকগুলি ছোট চক্র থাকে যেমন 1000 বারের মতো একটি ফাংশন যা 1000 ডেটা অবজেক্টগুলিকে প্রসেস করে তবে আপনি দেখতে চান যে এই ক্রিয়ায় প্রতিটি ক্রিয়াকলাপ কীভাবে মোট যোগ করে।

সুতরাং এটির একটি মডিউল গ্লোবাল (সিঙ্গলটন) টাইমার ব্যবহার করে। ক্লাস সিঙ্গলটন প্যাটার্ন হিসাবে একই, ব্যবহার করার জন্য কিছুটা সহজ, তবে আপনার এটি পৃথক উদাহরণস্বরূপ stopwatch.jsফাইলে রাখা দরকার।

const perf = typeof performance !== "undefined" ? performance : require('perf_hooks').performance;
const DIGITS = 2;

let _timers = {};

const _log = (label, delta?) => {
    if (_timers[label]) {
        console.log(`${label}: ` + (delta ? `${delta.toFixed(DIGITS)} ms last, ` : '') +
            `${_timers[label].total.toFixed(DIGITS)} ms total, ${_timers[label].cycles} cycles`);
    }
};

export const Stopwatch = {
    start(label) {
        const now = perf.now();
        if (_timers[label]) {
            if (!_timers[label].started) {
                _timers[label].started = now;
            }
        } else {
            _timers[label] = {
                started: now,
                total: 0,
                cycles: 0
            };
        }
    },
    /** Returns total elapsed milliseconds, or null if stopwatch doesn't exist. */
    stop(label, log = false) {
        const now = perf.now();
        if (_timers[label]) {
            let delta;
            if(_timers[label].started) {
                delta = now - _timers[label].started;
                _timers[label].started = null;
                _timers[label].total += delta;
                _timers[label].cycles++;
            }
            log && _log(label, delta);
            return _timers[label].total;
        } else {
            return null;
        }
    },
    /** Logs total time */
    log: _log,
    delete(label) {
        delete _timers[label];
    }
};

1

performance hooksমডিউলটি ব্যবহার করা ভাল উপায় । অস্থিরতা সত্ত্বেও , আপনি markআপনার কোড এবং চিহ্নিত অঞ্চলগুলির মধ্যে নির্দিষ্ট ক্ষেত্রগুলি নির্দিষ্ট করতে পারেন ।measureduration

const { performance, PerformanceObserver } = require('perf_hooks');

const measures = []

const obs = new PerformanceObserver(list => measures.push(...list.getEntries()));
obs.observe({ entryTypes: ['measure'] });
const getEntriesByType = cb => cb(measures);

const doSomething = val => {
  performance.mark('beginning of the process');

  val *= 2;

  performance.mark('after multiplication');

  performance.measure('time taken', 'beginning of the process', 'after multiplication');

  getEntriesByType(entries => {
    entries.forEach(entry => console.log(entry));
  })

  return val;
}

doSomething(4);

এখানে চেষ্টা করুন


0
const { performance } = require('perf_hooks');

function addUpTo(n) {
  let total = 0;
  for (let i = 1; i <= n; i++) {
    total += i;
  }
  return total;
}


let t1 = performance.now();
addUpTo(1000000000);
let t2 = performance.now();
console.log(`Time elapsed: ${(t2 - t1) / 1000} seconds`);
// Time elapsed: 1.1261566010713577 seconds

0

পারফরম্যান্স সহ

নোডজেস: পারফরম্যান্স ক্লাসটি আমদানি করা দরকার

var time0 = performance.now(); // Store the time at this point into time0

yourFunction();   // The function you're measuring time for 

var time1 = performance.now(); // Store the time at this point into time1

console.log("youFunction took " + (time1 - time0) + " milliseconds to execute");

কনসোল.টাইম ব্যবহার করা হচ্ছে

console.time('someFunction');

someFunction(); // Whatever is timed goes between the two "console.time"

console.timeEnd('someFunction');

0
  1. করতে শুরু টাইমার ব্যবহারconsole.time("myTimer");
  2. ঐচ্ছিক: করতে প্রিন্ট অতিবাহিত সময়, ব্যবহার console.timeLog("myTimer");
  3. অবশেষে, টাইমারটি বন্ধ করতে এবং চূড়ান্ত সময়টি মুদ্রণ করতে:console.timeEnd("myTimer");

আপনি এমডিএন এবং নোড.জেএস ডকুমেন্টেশনে এটি সম্পর্কে আরও পড়তে পারেন ।

ক্রোম, ফায়ারফক্স, অপেরা এবং নোডজেএস এ উপলব্ধ। (এজ বা ইন্টারনেট এক্সপ্লোরারে নেই)।


-2

পূর্বে উল্লিখিত হিসাবে টাইমার জন্য নির্মিত এবং ব্যবহার পরীক্ষা করুন। তবে আপনি যদি নিজের লেখার প্রয়োজন বা এখানে লিখতে চান তবে আমার দুটি সেন্ট:

//=-=|Source|=-=//
/**
 * JavaScript Timer Object
 *
 *      var now=timer['elapsed'](); 
 *      timer['stop']();
 *      timer['start']();
 *      timer['reset']();
 * 
 * @expose
 * @method timer
 * @return {number}
 */
timer=function(){
    var a=Date.now();
    b=0;
    return{
        /** @expose */
        elapsed:function(){return b=Date.now()-a},
        start:function(){return a=Date.now()},
        stop:function(){return Date.now()},
        reset:function(){return a=0}
    }
}();

//=-=|Google Advanced Optimized|=-=//
timer=function(){var a=Date.now();b=0;return{a:function(){return b=Date.now()-a},start:function(){return a=Date.now()},stop:function(){return Date.now()},reset:function(){return a=0}}}();

সংকলন ছিল একটি সাফল্য!

  • আসল আকার: 219 বাইট গিজিপড (405 বাইট সঙ্কুচিত)
  • সংক্ষিপ্ত আকার: 109 বাইট জিজিপড (187 বাইট সঙ্কুচিত)
  • জিপিড আকার থেকে 50.23% সংরক্ষণ করা হয়েছে (জিজিপ ছাড়াই 53.83%)

-6

গৃহীত উত্তরটি ভুল !

জাভাস্ক্রিপ্ট যেহেতু অবিচ্ছিন্ন, তাই গৃহীত উত্তরের পরিবর্তনশীল শেষের মানগুলি ভুল হবে।

var start = new Date().getTime();

for (i = 0; i < 50000; ++i) {
// JavaScript is not waiting until the for is finished !!
}

var end = new Date().getTime();
var time = end - start;
alert('Execution time: ' + time); 

এর কার্যকর করা খুব দ্রুত হতে পারে তাই আপনি দেখতে পাচ্ছেন না যে ফলাফলটি ভুল। আপনি কিছু অনুরোধ করে একটি কোড দিয়ে এটি পরীক্ষা করতে পারেন:

var start = new Date().getTime();

for (i = 0; i < 50000; ++i) {
  $.ajax({
    url: 'www.oneOfYourWebsites.com',
    success: function(){
       console.log("success");
    }
  });
}

var end = new Date().getTime();
var time = end - start;
alert('Execution time: ' + time); 

সুতরাং সতর্কতাটি খুব দ্রুত অনুরোধ করা হবে তবে কনসোলে আপনি দেখতে পাবেন যে এজাক্স অনুরোধগুলি অবিরত রয়েছে।

আপনার এটি কীভাবে করা উচিত তা এখানে: https://developer.mozilla.org/en-US/docs/Web/API/Performance.now


9
এটি লুপের কারণে নয়। লুপের জন্য একটি শেষ লুপ পর্যন্ত অপেক্ষা করবে যতক্ষণ না এটি আপনার উত্সকোডটি নেমে যায়। AJAX কলগুলি async। এবং অন্যান্য ফাংশনগুলিও রয়েছে যা অ্যাসিঙ্ক চালায়। তবে লুপের জন্য একটি অ্যাসিঙ্ক কার্যকর হয় না।
স্ক্রিপ্টলেবস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.