2011-08-04 10 views
6

हाय मैं जावास्क्रिप्ट में स्टॉपवॉच उपयोगिता प्रोग्रामिंग कर रहा हूं और मेरे पास दक्षता और ओवरहेड के बारे में एक प्रश्न है। स्टॉपवॉच बनाने के दो तरीके हैं:कुशल स्टॉपवॉच

1. शुरुआत शुरू करें तिथि और उस तारीख से मिली मिलीसेकंड की संख्या को लगातार मापें।

2. एक पूर्णांक बनाएं और एक सेट अंतराल पर अपना मान बढ़ाएं।

मैं जानना चाहता हूं कि कौन सा सबसे कुशल है। साथ ही, मुझे यकीन नहीं है कि विकल्प # 2 बहुत सटीक होगा, अगर किसी के पास इस बारे में कोई इनपुट है तो यह भी शानदार होगा।

+1

# 1 दोनों अधिक कुशल और # 2 काम नहीं करेंगे, क्योंकि आप 'टिक' के बीच के समय की गारंटी नहीं दे सकते। – OverZealous

+0

'performance.now()' आधुनिक ब्राउज़रों में उपलब्ध है https://developer.mozilla.org/en-US/docs/Web/API/Performance/now –

उत्तर

3

जैसा कि अन्य ने कहा है, # 1 के साथ जाएं। यदि आप एक घड़ी चाहते हैं जो प्रत्येक सेकेंड (या मिनट या जो कुछ भी) पर टिके, तो आपको अगले "टिक" के समय का अनुमान लगाना चाहिए ताकि सेटटाइमआउट को सही समय के बाद कुछ एमएस कहा जा सके। बस अगले पूरे दूसरे के बाद चलाने के लिए:

var d = new Date(); 
var interval = 1020 - d.getMilliseconds(); 
setTimeout(fn, interval); 

इस तरह अगर एक कॉल के लिए निष्पादन प्रणाली व्यस्त होने से देरी हो रही है, अगले एक अभी भी 20ms के बारे में अगले पूरे दूसरे के बाद बुलाया जाना चाहिए।

+1

यह अभी भी टाइमआउट याद कर सकता है (उदा। कंप्यूटर सो जाता है); टाइमआउट के अंदर एक डेल्टा अभी भी जरूरी है, जो आवश्यक है उसके आधार पर। –

+0

बेशक ब्राउज़र में कुछ भी स्क्रिप्ट निष्पादित करने वाले ब्राउज़र पर निर्भर है। "टाइमआउट के अंदर डेल्टा" का क्या मतलब है? – RobG

+0

यह सुनिश्चित करने के बारे में बिंदु कि सही समय पर घड़ी अपडेट की गई है, दिलचस्प है। हालांकि, इसके बिना घड़ी अभी भी सही समय प्रदर्शित करेगी भले ही यह प्रदर्शन पर पीछे हो, है ना? –

3

विकल्प 2 सटीक नहीं होगा, खासकर यदि आपके पास अन्य उद्देश्यों के लिए अतिरिक्त जावास्क्रिप्ट वाला कोई पृष्ठ है। पहले दृष्टिकोण के साथ जाओ।

+0

हालांकि, विकल्प # 1 * घड़ी परिवर्तन * होना चाहिए के लिए हिसाब। यही है, अपेक्षित परिवर्तन और वास्तविक परिवर्तन की तुलना की जानी चाहिए (त्रुटि के उचित मार्जिन के साथ) - और यदि आवश्यक हो तो सही किया गया। माना जाता है, यह एक बहुत बढ़िया मामला है। –

संबंधित मुद्दे