2010-04-21 22 views
10

flash.utils.setTimeout के लिये दस्तावेज() राज्य बनाम:टाइमर setTimeout

के बजाय इस पद्धति का उपयोग, एक टाइमर वस्तु बनाने, निर्दिष्ट अंतराल के साथ, repeatCount पैरामीटर के रूप में 1 उपयोग करने पर विचार (जो केवल एक बार चलाने के लिए टाइमर सेट करता है)।

क्या किसी को पता है कि ऐसा करने में कोई महत्वपूर्ण (महत्वपूर्ण) लाभ है या नहीं? सेटटाइमआउट का उपयोग करना बहुत आसान होता है जब आपको केवल 1 कॉल में देरी की आवश्यकता होती है।

उत्तर

11

setTimeout वास्तव में एक Timer उपवर्ग, SetIntervalTimer, जो एक आंतरिक वर्ग है उपयोग करता है। आप setTimeout(function():void { throw "booom"; }, 1); कर कर जांच सकते हैं। आप इसे स्टैक ट्रेस में देखेंगे।

इस तरह के रूप में, मैं नहीं वास्तव में एक बड़ी नुकसान देख सकते हैं। केवल अंतर यह है कि आपके पास एक के बजाय 2 अज्ञात कॉल हैं। ओटीओएच, प्रदर्शन महत्वपूर्ण परिस्थितियों में, आपको TimerEvent ऑब्जेक्ट्स की लगातार तत्कालता से बचने के लिए या तो (एक आंतरिक टाइमर को छोड़कर) का उपयोग नहीं करना चाहिए।

मूल रूप से, मुझे लगता है कि यह स्वाद की बात है। एडोब ने फैसला किया, एएस 3 इवेंट सिस्टम चमकदार है, इसलिए वे इसे बढ़ावा देते हैं।

0

यह मेरी समझ है कि setTimeout AS3 में मूल्यह्रास हुआ है। मुझे सेटटाइम कोड के स्रोत को खोजने में कुछ परेशानी हो रही है, लेकिन मुझे यह भी विश्वास है कि टाइमर ऑब्जेक्ट के किसी भी संदर्भ को सेटटाइमआउट (यदि मुझे एएस 2 से सही याद है) की तुलना में किसी भी संदर्भ को साफ़ करना आसान है।

-2

setTimeout बाहरी .as फाइलों में काम नहीं कर रहा।

+0

हाय। आपको यहां देखकर अच्छा लगा :) वैसे भी: क्या आप थोड़ा और विस्तार से जा सकते हैं? "बाहरी" से आपका क्या मतलब है? – back2dos

+0

बाहरी .as फाइलों से मेरा मतलब वर्ग है। क्या यहां कक्षाओं के बिना एएस 3 का उपयोग कर रहा है? पीएस: क्या हम एक-दूसरे को जानते हैं? –

+0

अजीब। मेरे लिए पूरी तरह से काम करता है, भले ही आईडीई या एमएक्सएमएलसी के साथ संकलित हो। पीएस: व्यक्तिगत रूप से नहीं, लेकिन हेक्स मेलिंग सूची से। :) – back2dos

0

आमतौर पर कुछ हासिल करने के लिए नया और अधिक शक्तिशाली तरीका बनने पर कुछ तोड़ दिया जाता है।

हाँ सेटटाइमआउट कुछ मामलों में सेटअप करना अधिक आसान है, लेकिन यह अन्य मामलों में बहुत सीमित है।

मैं टाइमर क्लास का उपयोग करूंगा, क्योंकि आमतौर पर जब कुछ बहिष्कृत होता है, तो इसका मतलब है कि भविष्य में कुछ समय के लिए समर्थन हटाया जा सकता है, और फिर आपका कोड काम नहीं करेगा।

+0

आयात करें आमतौर पर एक अच्छा तर्क है, लेकिन फ़्लैश प्लेयर के साथ होने की संभावना नहीं है। एडोब वास्तव में पिछड़े संगतता और विरासत समर्थन के बारे में बहुत कुछ परवाह करता है। भी, इस मामले में, कोई भी दो पंक्तियों के भीतर समारोह को फिर से लिख सकता है। – back2dos

+0

@ back2dos, हाँ आप एडोब के मामले में सही हैं, लेकिन आम तौर पर अच्छे प्रथाओं का पालन क्यों नहीं करते? –

+0

एडोब की राय के अलावा टाइमर को 'सेटटाइमआउट' से बेहतर अभ्यास क्यों करता है? मैं मानता हूं, 'टाइमर' और अधिक संभावनाएं प्रदान करता है, फिर 'सेट इंटरवल' और 'सेट टाइमर', लेकिन फिर, एवीएम 2 बाइटकोड एक्शनस्क्रिप्ट की तुलना में अधिक संभावनाएं प्रदान करता है: डी मुझे लगता है कि 'सेटटाइमआउट' एक उपयोगी कार्य है। अगर वह वहां नहीं था, तो मैं इसे अपने आप लिखूंगा। मेरे लिए, कोड संक्षिप्त होने के लिए यह अच्छा अभ्यास है, क्योंकि इससे इसे पठनीय और समझ में आता है। इसलिए जब मैं आम तौर पर सहमत हूं, आमतौर पर एक्शनस्क्रिप्ट 3 के मामले में बहिष्करण को गंभीरता से लिया जाना चाहिए, मुझे अक्सर लगता है कि यह वास्तव में स्वाद का मामला है। – back2dos

0

समस्या यह है कि टाइमर ऑब्जेक्ट बिल्कुल सटीक नहीं है, और यह फ्रेमरेट उतार-चढ़ाव के अधीन है। http://forums.adobe.com/message/892631 पढ़ें। मैंने Date ऑब्जेक्ट का उपयोग करके अपना खुद का टाइमर (जिसे रियलटाइमर कहा जाता है) बनाया और यह अधिक सटीक है। मैं वही करने की सलाह देता हूं।

8

टाइमर:

  • आपको अधिक नियंत्रण आप रजिस्टर कर सकते हैं और अधिक घटना श्रोताओं के रूप में setTimeout

  • आप शुरू नियंत्रित कर सकते हैं के साथ एक एक एक के बजाय घटना प्राप्त करने के लिए देता है समय और
    पुनरावृत्ति की संख्या (बहुत सेटटाइमआउट के खिलाफ उपयोगी नहीं है, क्योंकि यह
    सिर्फ एक बार चलाने के लिए है और एक
    विलंब के बाद तत्काल समय यह कहा जाता था)

  • अधिक लाइनों, लिखने के लिए विचार और भी अधिक अगर आप इस के लिए मानकों (कस्टम घटना वर्ग) के साथ अंतर करने के लिए की जरूरत
  • इवेंट श्रोताओं का उपयोग जो
    मानक अभ्यास AS3 में है।
  • स्वच्छ रूप

setTimeout:

  • आसान

  • कम कोड का उपयोग करने के लिखने के लिए

  • पैरामीटर्स आसानी से भेजा जा सकता है;

मैं टाइमर कक्षा पसंद करता हूं लेकिन मैंने प्रोग्रामर द्वारा अक्सर सेटटाइमआउट का उपयोग किया है।

इसके अलावा

अगर आप Tweening लाइब्रेरी का उपयोग कर रहे हैं, कुछ समर्थन में देरी कॉल

के लिए उदाहरण TweenMax TweenMax.delayedCall (2, myfunction, [ "myParam"]);

उन सभी जो कहना है कि setTimeout अब मान्य नहीं है के लिए, यह गैर भावना है ..

http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/utils/package.html#setTimeout%28%29

मेरा मानना ​​है कि आप setTimeout यहाँ के आसपास किसी भी "पदावनत" कीवर्ड नहीं देख सकते हैं

2

setTimeout है बाहरी .as फ़ाइलों में पूरी तरह से अच्छी तरह से काम कर रहे हैं।

बस कक्षा में इस का उपयोग करें:

import flash.utils.*; 
import flash.events.TimerEvent;