2012-03-30 14 views
10

मामले में आप नहीं जानते कि मैं क्या बात कर रहा हूँ, कृपया इसे पढ़ें John Resig - How JavaScript Timers Work और Is JavaScript guaranteed to be single-threaded?जावास्क्रिप्ट कोड निष्पादन क्या ट्रिगर करता है?

कई चलाता है कि जे एस इंजन की सजा को फीफो में कार्य enqueue रहे हैं। यह किसी भी मानक का हिस्सा नहीं है, इसलिए मैं उन ट्रिगर्स की एक उत्तेजक सूची खोजने की कोशिश कर रहा हूं। (मैं यह सब आंतरिक ईवेंट हैंडलर्स करने पर निर्भर करता, स्क्रिप्ट इवेंट लोड या टाइमर ईवेंट की तरह है, लेकिन मैं नहीं बल्कि इंजन के internals ध्यान न दें और देखने के उपयोगकर्ता के बिंदु से चीजों को देखने चाहते हैं लगता है।)

तो जहाँ तक मुझे * क्रम *

  • घटना handl पर जे एस द्वारा डाला
  • <script> तत्वों (document.write से जोड़ा लोगों सहित) प्रारंभिक दस्तावेज़ में

    • <script> तत्वों की पहचान की है ईआरएस
      - इन तरह के उपयोगकर्ता संपर्क, त्रुटि की घटनाओं, वेब कर्मचारी संदेश या अजाक्स कॉलबैक के रूप में मामलों, की एक विस्तृत विविधता ...
    • window.setTimeout शामिल
    • window.setInterval

    *) केवल ब्राउज़र में/डोम वातावरण

    और भी? जेएस इंजन के बीच कोई अंतर?

  • +0

    window.setTimeout और window.setInterval के समान, अब window.requestAnimationFrame है जो अगली बार आपके डिस्प्ले रीफ्रेश (आमतौर पर एक सेकंड का 1/60 वां) – jcmiller11

    +1

    फ़ंक्शन को ट्रिगर करने का प्रयास करेगा, आप 'setTimeout() को समूहबद्ध कर सकते हैं 'और' setInterval() 'ईवेंट हैंडलर के साथ मिलकर क्योंकि वे यही हैं: समय की घटनाएं। असल में, केवल दो चीजें हैं: ईवेंट हैंडलर और स्क्रिप्ट लोडिंग। – slebetman

    उत्तर

    1

    भाषा नाम के रूप में "जावास्क्रिप्ट" वास्तव में उपयोग नहीं किया जाना चाहिए यह बहुत व्यापक है।

    ईसीएमएस्क्रिप्ट वह है जिसका आप उल्लेख कर रहे हैं। आप http://www.ecmascript.org/ पर ECMAScript पर जानकारी पा सकते हैं भाषा मानक को अधिकांश ब्राउज़र द्वारा समर्थित 5.1 संस्करण के साथ ECMA-262 कहा जाता है।

    setTimeout, setInterval, DOM ईवेंट, और अधिक भाषा का हिस्सा नहीं हैं। ये होस्ट वातावरण द्वारा होस्ट ऑब्जेक्ट्स के रूप में प्रदान किए जाते हैं। होस्ट ऑब्जेक्ट्स का उपयोग करते समय मेजबान पर्यावरण की एक विस्तृत श्रृंखला के लिए ईसीएमएस्क्रिप्ट लिखना विशेष देखभाल करना चाहिए।

    ईसीएमएस्क्रिप्ट कोड निष्पादन संदर्भ में निष्पादित किया गया है। यह एक ढेर का रूप लेता है और शीर्ष पर वर्तमान निष्पादन संदर्भ की स्थिति को पकड़ लेगा।

    निष्पादन संदर्भ को धक्का देने के 3 तरीके हैं। वैश्विक कोड, eval, और समारोह। कोड शुरू करने का यही एकमात्र तरीका है। होस्ट वातावरण कोड निष्पादित करने के लिए इन विधियों का उपयोग करेंगे।

    होस्ट वातावरण कॉल स्टैक की आपूर्ति कर सकता है। इसका उपयोग मेजबान ऑब्जेक्ट्स द्वारा जेनरेट की गई फ़ंक्शन कॉल को ढेर करने के लिए किया जाता है जो स्वतंत्र धागे में चल सकता है। आम तौर पर सेटटाइमआउट जैसे एक ईवेंट कॉल स्टैक में एक फ़ंक्शन जोड़ देगा। होस्ट वातावरण तब तक प्रतीक्षा करेगा जब तक कि निष्पादन संदर्भ स्टैक खाली न हो, तब कॉल स्टैक से फ़ंक्शन को पॉप करें, एक नया निष्पादन संदर्भ बनाएं, पूरा होने तक कोड निष्पादित करें। कॉल स्टैक खाली होने तक यह दोहराएगा।

    होस्ट ऑब्जेक्ट निष्पादन संदर्भ प्रबंधकों की एक विस्तृत सूची बनाने का प्रयास व्यर्थ है।

    प्रश्नों के उत्तर देने के लिए।

    और भी? हां और भी बहुत कुछ हैं।यह इस उत्तर के दायरे से बाहर है। उस विशेष होस्ट वातावरण का संदर्भ लें जिसका आप उपयोग करना चाहते हैं।

    जेएस इंजन के बीच कोई अंतर? (ईसीएमएस्क्रिप्ट होस्ट वातावरण)। हां। इस जवाब के दायरे से परे और मेजबान पर निर्भर

    दर्जनों होस्ट वातावरण हैं, हर समय नए बनाए गए हैं। एक नए निष्पादन संदर्भ के निर्माण को ट्रिगर करता है मेजबान पर्यावरण पर अत्यधिक निर्भर करता है।

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