2011-02-27 34 views
26

का उपयोग करके मुझे com.google.gwt.core.client.Scheduler इंटरफेस के विभिन्न तरीकों, विशेष रूप से scheduleDeferred, scheduleFinally, और scheduleIncremental विधियों के बीच अंतर को समझने में कठिनाई हो रही है।जीडब्ल्यूटी शेड्यूलर

मुझे लगता है कि, मेरी समझ में बाधा आती है, मुझे लगता है कि ब्राउज़र इवेंट प्रोसेसिंग लूप के साथ मेरी अपरिचितता से, जिसमें शेड्यूलर प्रलेखन संदर्भित करता है।

क्या आप कृपया बताएं कि ये विधियां एक दूसरे से अलग कैसे हैं, और ब्राउज़र ईवेंट लूप के संबंध में वे कैसे काम करते हैं?

उत्तर

42

जावास्क्रिप्ट (ब्राउज़र में) एकल थ्रेडेड है। घटना पाश मॉडल का मतलब है, हम हमेशा ठीक एक दो राज्यों की में कर रहे हैं:

    घटना पाश
  • एक ईवेंट हैंडलर

घटनाओं के कई प्रकार के होते हैं को क्रियान्वित करने में

  • : घटनाओं के लिए क्लिक करें, ऑनलोड इवेंट, एक्सएचआर इवेंट्स, टाइमर इवेंट्स, ... आपको कुछ हैंडलर घोषित करना होगा (पेज लोड के दौरान कम से कम एक), अन्यथा आपका कोई कोड कभी भी निष्पादित नहीं किया जाएगा। उनमें से एक हैडलर जिसे आप onModuleLoad लागू करके निर्दिष्ट करते हैं।

    सभी हैंडलर को कम रखना महत्वपूर्ण है, क्योंकि कोई समांतरता नहीं है और कोई इंटरप्ट नहीं है (अंतिम उपाय "अनुत्तरदायी स्क्रिप्ट" बाधा को छोड़कर)। इसका अर्थ यह है कि उपयोगकर्ता इंटरफ़ेस से इंटरैक्ट नहीं कर सकते हैं, जब तक कि ब्राउज़र ईवेंट लूप पर वापस न आए - और यह वर्तमान हैंडलर समाप्त होने से पहले नहीं होता है।

    तो यदि आप किसी अन्य ईवेंट हैंडलर के मौके के बाद तक कुछ कोड को स्थगित करना चाहते हैं, तो आप Scheduler.scheduleDeferred का उपयोग कर सकते हैं।

    Scheduler.scheduleIncremental आपको कई चरणों में वास्तव में लंबे समय तक चलने वाले कार्यों को विभाजित करने में मदद करता है, जिससे अन्य ईवेंट हैंडलर प्रत्येक चरण के बीच एक मौका देते हैं।

    Scheduler.scheduleFinally का मतलब है: हमारे वर्तमान हैंडलर को संभालने के बाद (यहां तक ​​कि अगर कोई अपवाद होता है), लेकिन ईवेंट लूप पर लौटने से पहले, मेरे आदेश को निष्पादित करें।

    देखें com.google.gwt.core.client.impl.Impl.entry0()

  • +2

    क्या होगा यदि मैं सीएसएस स्टाइल डोम के लिए एक बदलाव, या शायद बनाने के लिए, मेरे लंबे समय से चल ईवेंट हैंडलर के शेष के साथ जारी रखने से पहले करना चाहते हैं? शेड्यूल का उपयोग कर रहे हैं या शेड्यूल इन्स्ट्रुमेंटल शेष कारण पर पृष्ठ तुरंत दिखाई देने के लिए बदल जाएगा? – David

    +0

    @ डेविड: कोड को रखें जो वर्तमान हैंडलर में डोम/स्टाइल को बदलता है। शेष को शेड्यूल में ले जाएं। आपके शेड्यूल किए गए कॉमांड निष्पादित होने से पहले परिवर्तन फिर से प्रस्तुत किए जाएंगे। –

    +1

    अनुसूची का एक उदाहरण परिभाषित चीजों को और स्पष्ट करना चाहिए। आप इसे देख सकते हैं, विशेष रूप से जॉन लैब्लांका द्वारा जवाब। http://groups.google.com/group/google-web-toolkit/browse_thread/thread/47a669dc8e6b2469?pli=1 – Vicky

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