आप अपने स्थानीय विकास मशीन पर समारोह निष्पादन समय प्राप्त करने के लिए की जरूरत है , आप या तो अपने ब्राउज़र की रूपरेखा उपकरण, या इस तरह के रूप सांत्वना आदेशों का उपयोग कर सकते हैं console.time()
और console.timeEnd()
।
सभी आधुनिक ब्राउज़रों में जावास्क्रिप्ट प्रोफाइलर्स बिल्ट-इन हैं। इन प्रोफाइलर्स को सबसे सटीक माप देना चाहिए क्योंकि आपको अपने मौजूदा कोड को संशोधित करने की आवश्यकता नहीं है, जो फ़ंक्शन के निष्पादन समय को प्रभावित कर सकता है।
अपने जावास्क्रिप्ट को प्रोफाइल करने के लिए:
- में क्रोम , प्रेस F12 और चुनें प्रोफाइल टैब और फिर कलेक्ट जावास्क्रिप्ट सीपीयू प्रोफ़ाइल ।
- में फ़ायरफ़ॉक्स , स्थापित / खुला Firebug, और पर क्लिक करें प्रोफ़ाइल बटन।
- में IE 9+ , प्रेस F12 , पर क्लिक करें स्क्रिप्ट या प्रोफाइलर (आईई के अपने संस्करण के आधार पर)।
वैकल्पिक रूप से, आपकी विकास मशीन पर , आप अपने कोड के साथ इंस्ट्रूमेंटेशन जोड़ सकते हैं console.time()
और console.timeEnd()
। फ़ायरफ़ॉक्स 11 +, क्रोम 2 + और आईई 11+ में समर्थित ये फ़ंक्शन, उन टाइमर पर रिपोर्ट करते हैं, जिनके माध्यम से आप शुरू / बंद करते हैं 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
ऑब्जेक्ट में केवल मिलीसेकंड रिज़ॉल्यूशन है और यह किसी भी OS सिस्टम घड़ी परिवर्तन से प्रभावित होगा। आधुनिक ब्राउज़रों में, एक बेहतर विकल्प है।
बेहतर विकल्प उच्च संकल्प समय , उर्फ का उपयोग करना है window.performance.now()
। now()
पारंपरिक Date.getTime()
से दो महत्वपूर्ण तरीकों से बेहतर है:
now()
सबमिलिसकॉन्ड रिज़ॉल्यूशन वाला एक डबल है जो पेज के नेविगेशन की शुरुआत के बाद से मिलीसेकंड की संख्या का प्रतिनिधित्व करता है। यह भिन्नात्मक में माइक्रोसेकंड की संख्या लौटाता है (जैसे 1000.123 का मान 1 सेकंड और 123 माइक्रोसेकंड है)।
now()
नीरस रूप से बढ़ रहा है। यह महत्वपूर्ण है क्योंकि संभवतः बाद में कॉल पर आगे या पीछे कूद Date.getTime()
सकते हैं। विशेष रूप से, अगर ओएस का सिस्टम समय अपडेट किया जाता है (जैसे परमाणु घड़ी सिंक्रनाइज़ेशन), तो भी अपडेट किया जाता है। को हमेशा नीरस रूप से बढ़ने की गारंटी दी जाती है, इसलिए यह ओएस के सिस्टम समय से प्रभावित नहीं होता है - यह हमेशा दीवार-घड़ी का समय होगा (यह मानते हुए कि आपकी दीवार घड़ी परमाणु नहीं है ...)।Date.getTime()
now()
now()
लगभग हर जगह इस्तेमाल किया जा सकता है कि new Date().getTime()
, और यह + new Date
कर Date.now()
रहे हैं। अपवाद यह है कि समय Date
और now()
मिश्रण नहीं है, जैसा Date
कि यूनिक्स-एपोच (1970 के बाद मिलीसेकंड की संख्या) पर आधारित है , जबकि now()
आपके पेज नेविगेशन शुरू होने के बाद से मिलीसेकंड की संख्या है (इसलिए यह बहुत छोटा होगा Date
)।
यहाँ एक उदाहरण है कि कैसे उपयोग करें now()
:
function a() {
var start = window.performance.now();
... do stuff ...
var end = window.performance.now();
var dur = end - start;
}
now()
Chrome स्थिर, फ़ायरफ़ॉक्स 15+ और IE10 में समर्थित है। कई पॉलीफ़िल भी उपलब्ध हैं।
जंगली में निष्पादन समय को मापने के लिए एक अन्य विकल्प UserTiming है । की तरह ही बर्ताव करती है UserTiming console.time()
और console.timeEnd()
है, लेकिन यह एक ही उच्च रिज़ॉल्यूशन समय-चिह्न का इस्तेमाल करता है कि now()
का उपयोग करता है (ताकि आप एक उप मिलीसेकंड होगा- बढ़ती घड़ी मिल), और करने के लिए टाइम स्टांप और अवधि की बचत होती है PerformanceTimeline ।
UserTiming में निशान (टाइमस्टैम्प) और उपाय (अवधि) की अवधारणाएं हैं । आप जितने चाहें उतने को परिभाषित कर सकते हैं, और वे PerformanceTimeline पर सामने आ सकते हैं ।
टाइमस्टैम्प को बचाने के लिए, आप कॉल करें mark(startMarkName)
। अपने पहले निशान के बाद से अवधि प्राप्त करने के लिए, आप बस कॉल करें measure(measurename, startMarkname)
। तब अवधि आपके अंकों के साथ PerformanceTimeline में सहेजी जाती है।
function a() {
window.performance.mark("start");
... do stuff ...
window.performance.measure("myfunctionduration", "start");
}
// duration is window.performance.getEntriesByName("myfunctionduration", "measure")[0];
UserTiming IE10 + और Chrome25 + में उपलब्ध है। एक पॉलीफ़िल भी उपलब्ध है (जो मैंने लिखा था)।